2009-06-09 9 views
36

Voglio restituire un oggetto View() da un'azione e la risposta risultante dovrebbe avere un tipo di contenuto di testo/xml invece del testo/html predefinito.ASP.NET MVC e testo/tipo di contenuto xml

ho provato quanto segue, senza successo:

Response.ContentType = "text/xml"; 
return View(); 

So che è possibile specificare il tipo di contenuto restituendo ContentResult, ma che non rende la mia vista.

Spero di non dover rendere la visualizzazione a una stringa, quindi utilizzare return Content(), quindi probabilmente sto trascurando un modo semplice.

+1

Sono sorpreso che nessuno notato questo come un duplicato: http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return- xml-from-a-controller-action-in-asp-net-mvc –

+0

@TomasLycken, potrebbe essere perché leggen e me stesso stanno mettendo l'XML stesso nella Vista e desideriamo semplicemente impostare il ContentType della Vista, non creare XML nel Controller quindi passarlo alla vista. Questi sono sicuramente due metodi diversi. –

+1

Un'altra nota a tutti è che questa stringa del tipo di contenuto può essere referenziata come "System.Net.Mime.MediaTypeNames.Text.Xml'. – jamiebarrow

risposta

54
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" 
    ContentType="text/xml" %> 
+0

Grazie, sei un genio! –

+0

bello, non sapevo che si poteva impostare il ContentType sulla pagina stessa. Questa è una meraviglia: P –

+2

e se si dispone di vista del rasoio, quindi dovrebbe essere '@ {Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; } ' – avs099

0

Hai provato a impostare response.content dal metodo di pre rendering della vista nella pagina codebehind? ovviamente si presume che si stia utilizzando il motore di visualizzazione del modulo Web

+0

La mia vista non ha codebehind. – andreialecu

+0

quindi aggiungine uno ;-). –

+16

: -/Non aggiungere uno – Charlino

38

È necessario eseguire il rendering della stringa. Per tornare text/xml procedere come segue:

return new ContentResult { 
    ContentType = "text/xml", 
    Content = UTF8.GetString(yourXmlString), 
    ContentEncoding = System.Text.Encoding.UTF8 
}; 
+0

Bene, lo sapevo già (specificato nella domanda), ma voglio evitarlo. – andreialecu

+1

Funziona per me perché voglio restituire una risposta XML senza la necessità di una pagina di visualizzazione di aspx. – stephen

1

È necessario una vista che non esclude le cose e generare codice HTML, compreso il suo proprio contesto di tipo.

Una vista personalizzata può essere renderizzata direttamente a Response.Write (vedere JsonResult in Reflector per una classe che è molto simile a quella di cui si avrebbe bisogno).

Per rendere XML senza una stringa intermedia, salvare il codice XML in un XmlWriter creato su Response.Output.

6

Il controllo utenti (ASCX) non accetta ContentType = "text/xml".

Soluzione:

public ActionResult xxx() 
    { 
    Response.ContentType = "text/xml"; 
    return View("xxx.ascx"); 
    }