[英]Bind XMLDataSource to HTTP handler
我有一些將由一些使用者(ASPX頁,一個Flash文件,也許還有另一個)使用的動態生成的XML數據。
我已經將其實現為自定義處理程序。 我在處理程序中構造XML,然后使用response.write將其輸出。
現在,如果我將XMLDataSource的DataFile屬性設置為處理程序,它會嘗試從字面上讀取ashx文件,並且不會通過HTTP調用它。
有什么建議嗎?
將XML生成代碼放在單獨的類中。 使處理程序使用該類創建XML並將結果發送到客戶端(順便說一句,不要使用Response.Write您首先使用哪種XML文檔技術來構建XML?)。
確保該類可以將完成的XML作為字符串公開。
在您的ASPX頁面中,使用相同的類,並將XML字符串分配給XmlDataSource控件的data屬性。
編輯 :
由於您使用的是XmlTextWriter,根據您的評論,以上內容顯然有些令人困惑,因此我將添加這些詳細信息。
您需要獲取當前生成XML的代碼,並將其放在App_Code文件夾中的類中(或可能在dll項目中)。 此類將具有以XmlTextWriter作為參數的方法。
public class XmlCreator
{
public void GenerateXml(XmlTextWriter writer)
{
//All your code that writes the XML
}
}
在您的處理程序中,您將獲得以下代碼:-
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);
請注意,不需要Response.Write,這樣可以正確完成編碼。
在您的ASP.NET頁面中,您可以使用:-
StringWriter source = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(source, Encoding.Unicode);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);
yourXmlDataSource.Data = source.ToString();
XmlCreator可能不需要實例化,在這種情況下,您可以使用靜態類,這取決於為XM生成提供數據所需的其他數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.