2012-04-12 77 views
0

我想讓我的Razor View返回它呈現的html字符串,以便控制器將從視圖返回呈現的html字符串,而不僅僅是視圖。在ASP.NET MVC中沒有本地方法可以執行此操作。有沒有解決這個問題的方法?從剃刀視圖獲取字符串的最佳方法

通過說明性舉例:

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

回答

3

您可以使用Html.Partial返回該視圖的MvcHtmlString

您可以在System.Web.Mvc.Html.PartialExtensions找到Partial方法。

這裏有一個關於此方法的詳細信息: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()); 
+0

你介意如何在控制器中使用它來簡單輸出視圖生成的html字符串(我修改了我的問題)。 – Judo 2012-04-12 10:42:59

+0

請看我的更新@Judo – 2012-04-12 10:50:21