Question

J'ai des données XML généré dynamiquement qui sera consommée par quelques consommateurs (une page ASPX, un fichier flash et peut-être un autre aussi bien).

Je l'ai mis en œuvre en tant que gestionnaire personnalisé. Je construis le XML dans le gestionnaire et la sortie à l'aide response.write.

Si je mets la propriété DataFile de mon XmlDataSource au gestionnaire, il essaie de lire le fichier ashx littéralement et ne l'appelle pas par HTTP.

Un conseil?

Était-ce utile?

La solution

Placez votre code de génération XML dans une catégorie distincte. Avez-gestionnaire utiliser la classe pour créer le XML et envoyer les résultats au client (BTW, ne pas utiliser Response.Write ce document XML technologie que vous utilisez pour construire le XML en premier lieu?).

Assurez-vous que la classe peut exposer le XML complété sous forme de chaîne.

Dans votre page ASPX utiliser la même classe et affecter la chaîne XML à la propriété des données de votre contrôle XmlDataSource.

Modifier :

Puisque vous utilisez un XmlTextWriter et de votre commentaire ci-dessus est apparemment un peu confus, je vais ajouter ces détails.

Vous devez prendre le code qui génère actuellement le XML et le placer dans une classe dans le dossier App_Code (ou peut-être dans un projet dll). Cette classe aura une méthode qui prend en paramètre un XmlTextWriter.

public class XmlCreator
{
    public void GenerateXml(XmlTextWriter writer)
    {
         //All your code that writes the XML
    }
}

Dans votre gestionnaire vous avez alors ce code: -

XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

Notez pas besoin de Response.Write et cela obtient l'encodage fait correctement.

Dans votre page ASP.NET que vous utilisez: -

StringWriter source = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(source, Encoding.Unicode);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

yourXmlDataSource.Data = source.ToString();

XmlCreator n'a pas besoin d'être instanciés dans ce cas, vous pouvez utiliser une classe statique, il dépend de ce que d'autres données est nécessaire pour alimenter la génération XM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top