Создание XML на C # для jQuery

Я пытаюсь сгенерировать некоторый 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" %>

с выделенным кодом с использованием 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?


person Ralph Lavelle    schedule 05.10.2009    source источник


Ответы (3)


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

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

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

person Marc Gravell    schedule 05.10.2009
comment
См. Также: stackoverflow.com/questions/878695/ - person Marc Gravell; 05.10.2009
comment
Я использовал опцию ashx, не имея на моем сайте поддержки MVC, и, похоже, это помогло, спасибо Marc - person Ralph Lavelle; 05.10.2009

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

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

Попробуйте вместо этого написать 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());
}
person Andrew Hare    schedule 05.10.2009
comment
Похоже, это не имело никакого значения, Эндрю :-( Хотя спасибо - person Ralph Lavelle; 05.10.2009