Html.Partial
ビューのを返すために使用できMvcHtmlString
ます。
Partial
メソッドはで 見つけることができますSystem.Web.Mvc.Html.PartialExtensions
。
この方法の詳細については、http://msdn.microsoft.com/en-us/library/ee402898.aspxを参照してください。
私は個人的にこれをRenderPartials(複数)拡張メソッドに使用しています。
public static void RenderPartials<T>(this HtmlHelper helper,
string partialViewName, IEnumerable<T> models, string htmlFormat)
{
if (models == null)
return;
foreach (var view in models.Select(model =>
helper.Partial(partialViewName,model, helper.ViewData)))
{
helper.ViewContext.HttpContext.Response
.Output.Write(htmlFormat, view);
}
}
アップデート
コントローラー内の文字列にビューをレンダリングするには、次のようなことを行うことができます(少しハックのように見えますが)。
var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
var viewString = htmlHelper.Partial("PartialViewName");
ちょっとしたハックだと言う理由は、HtmlHelperがコントローラーやモデルではなく、ビューで使用されるように設計されているためです。そうは言っても、それが機能し、解析されたビューを文字列化する代替手段がない場合は、それが役立つ可能性があります。
あなたの質問の修正を考えると、あなたはこのようなものを探しているでしょう:
public string Index()
{
var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
return htmlHelper.Partial("PartialViewName");
}
上記のコードでhtmlHelperが正しく作成されない場合は、代わりに次のように作成できます。
TextWriter writer = new StringWriter();
var htmlHelper = new HtmlHelper(new ViewContext(ControllerContext,
new RazorView(ControllerContext, "","",true,null),
new ViewDataDictionary(),
new TempDataDictionary(), writer), new ViewPage());