Domanda

Ho un po 'di dati XML generati dinamicamente che sarà consumata da alcuni consumatori (una pagina ASPX, un file flash e forse un altro uno pure).

Ho implementato come un gestore personalizzato. Io costruisco il codice XML nel gestore e l'uscita usando Response.Write.

Ora, se ho impostato la proprietà DataFile della mia XmlDataSource al gestore, tenta di leggere il file ashx letteralmente e non chiama attraverso HTTP.

Qualche consiglio?

È stato utile?

Soluzione

posiziona il codice di generazione XML in una classe separata. Hanno il gestore utilizzare la classe per creare l'XML e inviare i risultati al client (BTW, non utilizzare Response.Write quello documento XML tecnologia stai usando per costruire la XML, in primo luogo?).

Assicurarsi che la classe può esporre l'XML completato come una stringa.

Nella pagina ASPX utilizzare la stessa classe e assegnare la stringa XML alla proprietà dei dati del vostro controllo XmlDataSource.

Modifica :

Dal momento che si sta utilizzando un XmlTextWriter e verso il commento di cui sopra è apparentemente un po 'di confusione aggiungerò questi dettagli.

È necessario prendere il codice che attualmente genera il codice XML e metterlo in una classe nella cartella App_Code (o, eventualmente, in un progetto dll). Questa classe avrà un metodo che accetta come parametro un XmlTextWriter.

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

Nel vostro gestore è quindi necessario questo codice: -

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

Si noti alcuna necessità di Response.Write e questo diventa la codifica fatto correttamente.

Nella pagina ASP.NET si utilizza: -

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

yourXmlDataSource.Data = source.ToString();

XmlCreator non può avere bisogno di essere istanziato, nel qual caso si potrebbe utilizzare una classe statica dipende da ciò che altri dati è necessario per alimentare la generazione XM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top