アクションからView()を返したいのですが、結果の応答のコンテンツタイプは、デフォルトのtext/htmlではなくtext/xmlになるはずです。
私は以下を試しましたが、成功しませんでした:
_Response.ContentType = "text/xml";
return View();
_
ContentResult
を返すことでコンテンツタイプを指定できることは知っていますが、それではビューがレンダリングされません。
ビューを文字列にレンダリングしてからreturn Content()
を使用する必要がないことを望んでいるため、簡単な方法を見落としている可能性があります。
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage"
ContentType="text/xml" %>
文字列をレンダリングする必要があります。 text/xmlを返すには、次のようにします。
return new ContentResult {
ContentType = "text/xml",
Content = UTF8.GetString(yourXmlString),
ContentEncoding = System.Text.Encoding.UTF8
};
ユーザーコントロール(ASCX)はContentType = "text/xml"を受け入れません。
解決:
public ActionResult xxx()
{
Response.ContentType = "text/xml";
return View("xxx.ascx");
}
物事を上書きせず、独自のコンテキストタイプを含むHTMLを生成するビューが必要です。
カスタムビューは、Response.Writeに直接レンダリングできます(必要なものと非常に似ているクラスについては、Reflectorの JsonResult
を参照してください)。
中間文字列なしでXMLをレンダリングするには、XMLをResponse.Output
上に作成されたXmlWriter
に保存します。
Razor(.cshtml)ビューを探している場合は、コンテンツタイプビューコード内を設定します。
@{
Response.ContentType = "text/xml";
}
分離コードページでビューの事前レンダリングメソッドからresponse.contentを設定してみましたか?これは明らかに、webformビューエンジンを使用していることを前提としています。