2016-08-30 13 views
0

ビューエンジンを使用してASP.NET Mvcでhtml文字列フォームcshtmlページを取得したいと思います。ビューエンジンを使用してasp.netのcshtmlページのHTML文字列を取得するには?

+0

あなたはカミソリを使用していますか?あなたはこれをどこでやっていますか?一部のメソッドはControllerContextに依存します –

+0

はい、私はRazorを使用しています...私はビューからpdfを生成するために取り組んでいます。 – Rajat1937

+0

ビューを文字列として取得するためのこの回答を見てください:http://stackoverflow.com/questions/36161381/can-a-web-api-controller-render-a-view-as-a-string/36178420 #36178420 – peco

答えて

0

は最後に、私は次のようにContollerContextViewEngineを使用して、かみそりのページからHTML文字列を生成することができる午前:

public static string GetHtmlFromView(this ControllerContext context, ViewEngineResult viewResult, string viewName, object model) 
     { 
      context.Controller.ViewData.Model = model; 
      using (StringWriter sw = new StringWriter()) 
      { 
       // view not found, throw an exception with searched locations 
       if (viewResult.View == null) 
       { 
        var locations = new StringBuilder(); 
        locations.AppendLine(); 

        foreach (string location in viewResult.SearchedLocations) 
        { 
         locations.AppendLine(location); 
        } 

        throw new InvalidOperationException(
         string.Format(
          "The view '{0}' or its master was not found, searched locations: {1}", viewName, locations)); 
       } 

       ViewContext viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw); 
       viewResult.View.Render(viewContext, sw); 

       string html = sw.GetStringBuilder().ToString(); 
       string baseUrl = string.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority); 
       //html = Regex.Replace(html, "<head>", string.Format("<head><base href=\"{0}\" />", baseUrl), RegexOptions.IgnoreCase); 
       return html; 
      } 
     } 
関連する問題