在C#中为jQuery创建XML
我正在尝试为jQuery.get(AJAX)调用生成一些XML,并且我从C#页面收到以下错误: “使用主题css文件需要页面上的标题控件。(例如 )。“
生成XML的文件是一个简单的.aspx文件,完全由以下部分组成:
使用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的标记有关,因为当我删除’styleSheetTheme’和’theme’属性时,XML生成正常。 那么问题显然是每个其他页面都失去了它的样式。 所有这些让我觉得我正在接近这个错误。
我的问题是:在C#中生成XML的可接受方式是什么,供jQuery AJAX调用使用,比如说?
如果我返回简单数据(不是页面),我可能不会使用aspx; 这真的是网络forms,但你要归还的不是网络forms。 跳过两种选择:
- 使用ASP.NET MVC; 听起来很老套,但它真的很适合更优雅地返回不同类型的响应
- 使用一个处理程序(ashx) – 它省略了所有网络forms的噪音,只留下一个
HttpContext
用来构建你的响应
您还可以尝试(在aspx内)清除响应( Clear()
?)并在之后调用Close()
。 但IMO比使用处理程序更加环绕。
你需要使用theme =“”例子:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ChangePeopleService.aspx.cs" Inherits="ChangeRegister.Person.ChangePeopleService" Theme="" %>
尝试写入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()); }