2009-10-05 7 views
1

J'essaie de générer du code XML pour un appel jQuery.get (AJAX), et j'obtiens l'erreur suivante de ma page C#: "L'utilisation de fichiers CSS à thème nécessite un contrôle d'en-tête sur la page. (par exemple <head runat="server" />). "Création de XML en C# pour jQuery

Le fichier générer le XML est un simple fichier .aspx, entièrement composé de:

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

avec codebehind LINQ à XML, qui fonctionne ok:

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()); 

I sachez que l'erreur est liée à la balise <pages styleSheetTheme="default" theme="default"> de Web.Config, car lorsque je supprime les attributs 'styleSheetTheme' et 'theme', le XML est généré correctement. Le problème est alors évidemment que chaque autre page perd son style. Tout cela m'amène à penser que j'aborde ce problème.

Ma question est: quelle est une façon acceptée de générer du XML en C#, pour la consommation par un appel jQuery AJAX, disons?

Répondre

3

Si je retourne des données simples (pas de page), je ne serais probablement pas utiliser ASPX; Ce sont vraiment des formulaires Web, mais ce que vous retournez n'est pas un formulaire Web. Deux options sautent à l'esprit:

  • utilisez ASP.NET MVC; semble ringard, mais il est vraiment conçu pour renvoyer des types de réponse beaucoup plus élégants
  • utiliser un gestionnaire (ashx) - qui omet tout le bruit de forme web, vous laissant simplement un HttpContext avec lequel construire votre réponse

Vous pouvez également essayer (au sein de ASPX) d'effacer la réponse (Clear()?) Et d'appeler Close() par la suite. Mais IMO beaucoup plus de rond-point que d'utiliser un gestionnaire.

+0

Voir aussi: http://stackoverflow.com/questions/ 878695/how-to-return-an-xml-string-as-an-action-result-in-mvc –

+0

J'ai utilisé l'option 'ashx', ne pas avoir activé MVC sur mon site, et cela semble avoir fait l'affaire , merci Marc –

0

Essayez d'écrire à la place 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()); 
} 
+0

Cela ne semble pas faire de différence Andrew :-(Merci bien –

1

Vous devez utiliser le thème = « » exemple:

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