2

我需要在 ASPX 页面上输出 XML / ASX。XML 是从后面的代码生成的,看起来像这样

我正在使用字符串生成器来创建 XML / ASX。

            (...)
            sb.AppendLine("<asx version='3.0'>");
            sb.AppendLine("<title> Spilliste </title>");
            while (i < pdc.Count)
            {
                sb.AppendLine("<entry>");
                sb.AppendLine("<title>" + pdc[i].PageName + "</title>");
                sb.AppendLine("<abstract> Ikke tilgjengelig</abstract>");
                sb.AppendLine("<ref>" + pdc[i].LinkURL + "</ref>");
                sb.AppendLine("</entry>");
                i++;
            }
            sb.AppendLine("</asx>");

            return sb.ToString();
            (...)

但是我怎样才能输出这个?

Response.Write不能从后面的代码中工作。而且我<asp:label>在 ASPX 文件中使用它是值得注意的,因为它需要放置在标签中。我基本上有一个空白的 ASPX 页面。

该怎么办?

4

4 回答 4

4

不要Page为此使用 a 。基本上Pages 用于渲染 html。如果您想为此发送 xml 或图像或任何其他类型的数据,您应该使用 .ashx 文件和实现 .ashx 的类IHttpHandler

你可以看到这个关于如何实现接口的例子。

于 2010-02-19T11:33:02.357 回答
0

Response.Write 应该从后面的代码中工作:

  Response.Write("some test");
  Response.Flush();

但是您应该在 Page_Load 方法中执行此代码。您应该准备单独的 aspx 页面来生成 xml 并重定向用户该页面。此页面应为空(仅<%@ ... %>在 aspx 文件中)。

于 2010-02-19T11:35:04.783 回答
0

您应该为此使用- 您可以通过制作.ashx文件(非常简单)或通过在web.config文件中注册它们IHttpHandler来配置它处理的 URL ,这更灵活,但更棘手,因为经典和集成模式 IIS。

然后,您将需要一个具有一个重要成员的简单类 - 一个仅采用一个参数的 ProcessRequest 方法 - HttpContext。

此外,避免使用 StringBuilder 来构建 XML。您可以改用更安全、更灵活的 linq to xml 类:使用这种类型安全的方法还可以更轻松编写帮助方法来正确生成部分 xml 树;并且您可以查询和转换结果以启动。

void ProcessRequest(HttpContext context) {
    var pdc = Enumerable.Range(0,10).Select(
        i=>new{PageName="Page"+i,LinkURL="Link"+i});                

    var xmlString = 
    new XElement("asx",
        new XAttribute("version","3.0"),
        new XElement("title","Spilliste"),
        pdc.Select(pdcElem=>
            new XElement("entry",
                new XElement("title",pdcElem.PageName),
                new XElement("abstract","Ikke tilgjengelig"),
                new XElement("ref",pdcElem.LinkURL)
            )
        )
    ).ToString(SaveOptions.DisableFormatting);

    //don't forget to handle headers and set things like content-type too!
    context.Response.Write(xmlString);
}

这种方法比绕过 .aspx 文件更好的原因是,虽然它可以在 .aspx 文件中实现,但您需要与框架抗争才能到达那里 - 一大堆基础设施会阻碍您,也许会巧妙地破坏您的输出到达客户端之前。摆脱这种情况的最简单方法是使用更简单的处理程序,该处理程序并非专门用于托管 aspx 控件和生成 HTML。

于 2010-02-19T11:52:25.180 回答
0
    Response.ClearHeaders();
    Response.ContentType = "text/xml;charset=UTF-8";
    string xmlString = "<aaa>sai</aaa>";
    Response.Write(xmlString);
    Response.End();
于 2012-11-28T10:20:19.687 回答