Создание XML в C # для jQuery - PullRequest
1 голос
/ 05 октября 2009

Я пытаюсь сгенерировать XML для вызова jQuery.get (AJAX) и получаю следующую ошибку со своей страницы C #: "Использование тематических файлов CSS требует элемента управления заголовком на странице. (например, <head runat="server" />). "

Файл, генерирующий XML, представляет собой простой файл .aspx, состоящий полностью из:

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

с codebehind с использованием 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());

Я знаю, что ошибка относится к тегу <pages styleSheetTheme="default" theme="default"> Web.Config, потому что когда я удаляю атрибуты 'styleSheetTheme' и 'theme', XML генерируется нормально. Очевидно, проблема в том, что каждая другая страница теряет свой стиль. Все это заставляет меня думать, что я ошибаюсь.

У меня такой вопрос: каков допустимый способ генерации XML в C # для использования, скажем, вызовом jQuery AJAX?

Ответы [ 3 ]

3 голосов
/ 05 октября 2009

Если я возвращаю простые данные (не страницу), я бы, вероятно, не использовал aspx; это действительно веб-формы, но то, что вы возвращаете, не является веб-формой. На ум приходят два варианта:

  • использовать ASP.NET MVC; звучит банально, но на самом деле он настроен на то, чтобы выдавать различные типы ответов гораздо более элегантно
  • используйте обработчик (ashx) - который исключает весь шум веб-формы, просто оставляя вам HttpContext, с помощью которого вы можете построить свой ответ

Вы также можете попробовать (в пределах aspx) очистить ответ (Clear()?) И затем вызвать Close(). Но IMO намного более обходной, чем просто использование обработчика.

1 голос
/ 04 января 2010

Вам нужно использовать theme = "" Пример:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ChangePeopleService.aspx.cs" Inherits="ChangeRegister.Person.ChangePeopleService" Theme="" %>
0 голосов
/ 05 октября 2009

Попробуйте вместо этого написать 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());
}
...