我有一些动态生成的 XML 数据将被少数消费者使用(一个 ASPX 页面、一个 flash 文件,也许还有另一个)。
我已将其实现为自定义处理程序。我在处理程序中构造 XML 并使用 response.write 将其输出。
现在,如果我将 XMLDataSource 的 DataFile 属性设置为处理程序,它会尝试逐字读取 ashx 文件,而不是通过 HTTP 调用它。
有什么建议吗?
我有一些动态生成的 XML 数据将被少数消费者使用(一个 ASPX 页面、一个 flash 文件,也许还有另一个)。
我已将其实现为自定义处理程序。我在处理程序中构造 XML 并使用 response.write 将其输出。
现在,如果我将 XMLDataSource 的 DataFile 属性设置为处理程序,它会尝试逐字读取 ashx 文件,而不是通过 HTTP 调用它。
有什么建议吗?
将您的 XML 生成代码放在一个单独的类中。让处理程序使用该类来创建 XML 并将结果发送到客户端(顺便说一句,不要使用 Response.Write 你首先使用什么 XML 文档技术来构建 XML?)。
确保该类可以将完整的 XML 公开为字符串。
在您的 ASPX 页面中,使用相同的类并将 XML 字符串分配给 XmlDataSource 控件的数据属性。
编辑:
由于您使用的是 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 生成。