2012-04-12 15 views
0

Razor Viewにレンダリングされたhtmlの文字列が返されるようにして、レンダリングされたhtml文字列をコントローラがビューだけでなくViewから返すようにします。 ASP.NET MVCでこれを行うためのネイティブメソッドはありません。このための回避策はありますか?具体例としてRazorビューから文字列を取得するためのベストメソッド

public ActionResult Index() 
     { 
      return View().ToString; //View has no ToString() method but this is what I am trying to do 
     } 

答えて

3

あなたは、ビューのMvcHtmlStringを返すためにHtml.Partialを使用することができます。

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); 
      } 
     } 

更新

にあなたのビューをレンダリングするために、あなたのコントローラの文字列(これはちょっとしたハックのようですが)をこのようにすることができます:

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()); 
をあなたはこのような何かを探していると思いますあなたの質問への改正を考える

+0

Viewで生成されたhtml文字列を単に出力するために、これをコントローラ内でどのように使うことができるかを見せてもらえますか? – Judo

+0

私の更新情報@Judoをご覧ください –

関連する問題