2011-07-22 14 views

答えて

-1

htmlビューをレンダリングするコントローラを作成します。あなたはMVCフレームワークを持っているViewContextを使用することができますが、その後

string newString = GetContent("/Controller/HtmlView"); 
+0

このソリューションでは、HTTPスタック全体を2回以上オーバーヘッドするオーバーヘッドが発生します。これは、文字通りワイヤを介してコンテンツをダウンロードすることなく、これを一度に行うことが可能でなければなりません。 –

1

を呼び出すことができ、あなたのコードで

public ActionResult HtmlView() 
{ 
    return View(); 
} 


public static string GetContent(string templatePath, string queryString = "") 
    { 
     bool isLocal = false; 


     if (HttpContext.Current != null) 
      isLocal = HttpContext.Current.Request.IsLocal; 

     try 
     { 
      var objWebClient = new System.Net.WebClient(); 
      byte[] requestedHtml; 

      if (isLocal) 
      { 

       string path = "http://" + HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + ":" + 
           HttpContext.Current.Request.ServerVariables["SERVER_PORT"] + templatePath + 
           queryString; 
       requestedHtml = objWebClient.DownloadData(path); 
      } 
      else 
      { 
       requestedHtml = objWebClient.DownloadData("http://" + HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + templatePath + queryString); 
      } 
      var utf8 = new UTF8Encoding(); 

      return utf8.GetString(requestedHtml).Replace(Environment.NewLine, ""); 
     } 
     catch (Exception e) 
     { 
      return ""; 
     } 
    } 

文字列にしたくないビューのHTMLには何も含まれていません。そのビューをStringWriterのようなTextWriterクラスにレンダリングし、そのオブジェクトからレンダリングされた文字列を取得します。

public string RenderViewToString(ControllerContext context, ViewResultBase viewBase) 
{ 
    using (var sw = new StringWriter()) 
    { 
     var view = viewBase.View; 
     var viewContext = new ViewContext(context, view, viewBase.ViewData, 
              viewBase.TempData, sw); 
     view.Render(viewContext, sw); 
     return sw.ToString(); 
    } 
} 
+0

@ Kirk Woll ViewResultBaseオブジェクトとControllerContextオブジェクトがあると仮定して、私の答えにコードを追加しました。 – Clayton

+0

いいです、それはうまくいくはずです。 –

関連する問題