2009-06-09 31 views
36

Bir eylemden bir View() döndürmek istiyorum ve sonuçta oluşan yanıtın, varsayılan metin/html yerine bir içerik türü metin/xml olması gerekir.ASP.NET MVC ve text/xml içerik türü

hiçbir başarı ile aşağıdakileri denedim:

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

Sana ContentResult döndürerek içerik türünü belirtebilirsiniz biliyorum, ama bu benim Görünüm hale gelmez.

Görüntüyü bir dizeye işlemek zorunda kalmadığımı umuyorum, sonra return Content() kullanın, bu yüzden muhtemelen kolay bir yolla ilgileniyorum.

+1

Hiç kimse kopya olarak bu lekeli şaşırdım: http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return- xml-a-denetleyiciler-eylem-içinde-net-mvc- –

+0

@TomasLycken, bu efsane ve kendimi XML'in kendisini Görünüme koyduğunu ve sadece XML'nin oluşturulmasını değil, Görünümün ContentType'ını ayarlamayı istediği içindir Denetleyicide daha sonra View'a iletir. Bunlar kesinlikle iki farklı yöntemdir. –

+1

Herkese bir not daha, bu içerik türündeki dizenin 'System.Net.Mime.MediaTypeNames.Text.Xml' olarak adlandırılabileceğidir. – jamiebarrow

cevap

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

Teşekkürler, sen bir dahisin! –

+0

güzel, ContentType'ı sayfanın kendisinde ayarlayabileceğinin farkında değildim. Bu berbat bir durumdur: P –

+2

ve eğer jilet görünümünüz varsa, o zaman '@ {Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; } ' – avs099

0

codebehind sayfasında, görünümün pre render yönteminden response.content ayarlamayı denediniz mi? Bu açıkça, webform görünüm motorunu kullandığınızı varsayarsak,

+0

Görünümümde codebehind yok. – andreialecu

+0

yüzden bir tane ekle ;-). –

+16

: -/Ekleme bir – Charlino

38

Dizeyi oluşturmanız gerekir. text/xml aşağıdakileri yapın dönmek için: Bunu kendi bağlam türü dahil, HTML şeyler geçersiz kılmak ve üretmeyen bir görünüm ihtiyaç

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

Eh, bu konuda zaten biliyordum (soruda belirtildi), ama bundan kaçınmak istiyorum. – andreialecu

+1

Benim için çalışır çünkü bir aspx View sayfasına ihtiyaç duymadan bir XML yanıtı vermek istiyorum. – stephen

1

.

Özel bir görünüm, Response.Write öğesine doğrudan yansır (ihtiyacınız olana çok benzer bir sınıf için Reflektörde JsonResult'a bakın).

Ara dize olmadan XML oluşturmak için, XML'inizi Response.Output üzerinden oluşturulan XmlWriter'a kaydedin.

6

Kullanıcılar denetimi (ASCX) ContentType = "text/xml" kabul etmez.

Çözüm:

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