我有一些動態生成的XML數據,這些數據將被少數使用者(ASPX頁面,Flash文件或其他應用程序)使用。將XMLDataSource綁定到HTTP處理程序
我已經實現它作爲自定義處理程序。我在處理程序中構造XML並使用response.write輸出它。
現在如果我將XMLDataSource的DataFile屬性設置爲處理程序,它會嘗試從字面上讀取ashx文件並且不會通過HTTP調用它。
有什麼建議嗎?
我有一些動態生成的XML數據,這些數據將被少數使用者(ASPX頁面,Flash文件或其他應用程序)使用。將XMLDataSource綁定到HTTP處理程序
我已經實現它作爲自定義處理程序。我在處理程序中構造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代。
我正在使用XMLTextWriter進行XML生成。 我不能創建一個類,因爲這個數據將會比ASP.Net的其他消費者。它必須是可以從網絡訪問的東西,因此HttpHandler – Midhat 2009-05-22 07:56:49