2012-05-13 10 views
0

MVCコントローラに、別のコントローラアクションを動的に呼び出して文字列としてレンダリングするコードを書き込もうとしています。基本的に私は剃刀のビューで利用できる@ Html.Action()ヘルパーメソッドを使用しようとしています。コントローラからの動的レンダリングアクション

しかし、コントローラ内のHtmlHelperは、コントローラのアクションを呼び出して文字列を出力するActionメソッドにアクセスできないようです。

誰かが部分的なビューを文字列に動的にレンダリングし、その文字列をコンテンツ結果に追加する方法を知っている人はいますか?

私はこの論理を完全に動的であり、ユーザーがデータベースに設定したいくつかの設定に応じて完全に変更できるため、この論理を剃刀ビューでは行いたくありません。これは、多くの異なるコントローラアクションを呼び出すこと、文字列を取得してコンテンツ結果に追加することを意味することになります。

助けていただければ幸いです。

答えて

0

次の方法(taken from here)使用することができます別の可能性はあなたがHtml.Actionを使用することができているカスタムHTMLヘルパー拡張メソッドを呼び出すことができますするビューをレンダリングすることです

protected string RenderPartialViewToString(string viewName, object model) 
{ 
    if (string.IsNullOrEmpty(viewName)) 
     viewName = ControllerContext.RouteData.GetRequiredString("action"); 

    ViewData.Model = model; 

    using (StringWriter sw = new StringWriter()) { 
     ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
     ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
     viewResult.View.Render(viewContext, sw); 

     return sw.GetStringBuilder().ToString(); 
    } 
} 

を:

public static IHtmlString MyMethod(this HtmlHelper html) 
{ 
    // you could use html.Action("someAction", "someController") here 
    ... 
} 
+0

いい実装ですが、これをAPIコントローラからどうやってやり遂げることができますか? – cpoDesign

関連する問題