代码之家  ›  专栏  ›  技术社区  ›  Ralph Lavelle

在c中为jquery创建XML

  •  1
  • Ralph Lavelle  · 技术社区  · 16 年前

    我正在尝试为jquery.get(ajax)调用生成一些XML,并从我的C页中得到以下错误: “使用主题化的CSS文件需要在页面上有一个标题控件。(例如) <head runat="server" />

    生成XML的文件是一个简单的.aspx文件,完全由以下部分组成:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ChangePeopleService.aspx.cs" Inherits="ChangeRegister.Person.ChangePeopleService" EnableTheming="false" %>
    

    对于使用linq to xml的codebehind,它工作正常:

    XElement xml =  new XElement("People",
                    from p in People
                    select new XElement("Person", new XAttribute("Id", p.Id),
                                        new XElement("FirstName", p.FirstName)));
    
    HttpContext.Current.Response.ContentType = "text/xml";
    HttpContext.Current.Response.Write(xml.ToString());
    

    我知道这个错误与web.config的 <pages styleSheetTheme="default" theme="default"> 标记,因为当我删除“stylesheettheme”和“theme”属性时,XML会正常生成。很明显,问题是其他页面都会失去其样式。所有这些都让我觉得我是在做错事情。

    我的问题是:用C生成XML的公认方法是什么,可以被jquery-ajax调用使用,比如说?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Marc Gravell    16 年前

    如果我返回的是简单的数据(不是页面),我可能不会使用ASPX;这实际上是Web表单,但您返回的不是Web表单。两种选择跃入脑海:

    • 使用ASP.NET MVC;听起来很老套,但它确实准备好了以更优雅的方式返回不同类型的响应。
    • 使用一个处理程序(ashx)——它省略了所有的web表单噪声,只留下一个 HttpContext 用它来构建你的反应

    您还可以尝试(在ASPX中)清除响应( Clear() ?)和呼叫 Close() 之后。但我不只是使用一个处理程序,而是更为迂回。

        2
  •  1
  •   Hans Olsson    14 年前

    您需要使用theme=“” 例子:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ChangePeopleService.aspx.cs" Inherits="ChangeRegister.Person.ChangePeopleService" Theme="" %>
    
        3
  •  0
  •   Andrew Hare    16 年前

    尝试写信给 Response.OutputStream 而是:

    HttpContext.Current.Response.ContentType = "text/xml";
    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
    
    using (TextWriter textWriter 
        = new StreamWriter(HttpContext.Current.Response.OutputStream, Encoding.UTF8))
    {
        XmlTextWriter writer = new XmlTextWriter(textWriter);
        writer.WriteString(xml.ToString());
    }