を持って行うためにそれを使用することができます
public static string RenderPartialToString(string controlName, object viewData)
{
var viewContext = new ViewContext();
var urlHelper = new UrlHelper(viewContext.RequestContext);
var viewDataDictionary = new ViewDataDictionary(viewData);
var viewPage = new ViewPage
{
ViewData = viewDataDictionary,
ViewContext = viewContext,
Url = urlHelper
};
var control = viewPage.LoadControl(controlName);
viewPage.Controls.Add(control);
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
using (var tw = new HtmlTextWriter(sw))
{
viewPage.RenderControl(tw);
}
return sb.ToString();
}
これは自分がやっているやり方が時代遅れだと思ったからです。私はどこにこれを持って忘れて、それのための信用を取っていないが、私はここに終わったので、私は私も同様に使用するものを投稿すると思う。上記の答えよりも新しい何かを探しに来てくれる人に役立つことを願っています。
**注これは、ビューのレンダリングのみを文字列にアドレス指定します。上記の答えは、結果をJSONオブジェクトのプロパティに入れることに関する質問に対処し、OPはとにかくそれにはかなり快適に思えました。
public string RenderViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
非常にいいです。ありがとう。 –
+1素晴らしい解決策Jake。私の "答え"がうまくいかなかったことを指摘してくれてありがとう - 私が言ったように、私がテストする時間がなかったというアイデアだったとき、あなたが投稿した後、私はもっと深く掘り下げました。なぜなら、なぜ、MVCチームは 'View.Render(文脈、作家)'が作者のパラメータを完全に無視して、レスポンスストリームにまっすぐ書いても私にとどまらないと決めたからです。私は騒音を減らすためにそれを取り除いた。私があなたの時間を無駄にして間違った方向に送ってしまったら、謝罪します。次回は論理的に動作するはずのコードを投稿しますが、実際に最初にテストします。 :) – Alconja
心配しないでください@Alconja - これは、私たちがcodeplexのmvcチームと一緒にオープンしなければならない種類の機能です。 – superlogical