在C#中为jQuery创建XML

时间:2009-10-05 06:01:23

标签: c# xml linq-to-xml

我正在尝试为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进行代码隐藏,工作正常:

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 个答案:

答案 0 :(得分:3)

如果我返回简单数据(不是页面),我可能不会使用aspx;这实际上是网络形式,但你要归还的不是网络形式。跳过两个选择:

  • 使用ASP.NET MVC;听起来很老套,但它真的很适合更优雅地回复不同类型的回应
  • 使用处理程序(ashx) - 它会省略所有网络形式的噪音,只留下HttpContext来构建您的回复

你也可以尝试(在aspx中)清除响应(Clear()?)并在之后调用Close()。但IMO比使用处理程序更加环绕。

答案 1 :(得分:1)

你需要使用theme =“” 例如:

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

答案 2 :(得分:0)

尝试写一下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());
}