将XMLDataSource绑定到HTTP处理程序

时间:2009-05-22 07:00:18

标签: asp.net httphandler ihttphandler ashx xmldatasource

我有一些动态生成的XML数据将由少数消费者使用(一个ASPX页面,一个Flash文件,也可能是另一个)。

我已将其实现为自定义处理程序。我在处理程序中构造XML并使用response.write输出它。

现在,如果我将XMLDataSource的DataFile属性设置为处理程序,它会尝试按字面读取ashx文件,而不是通过HTTP调用它。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

将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生成提供的其他数据。