2016-06-27 2 views
0

ビューを電子メールテンプレートとして使用する文字列としてレンダリングしようとしています。アムは、現在、この例を実装しようとしている: https://weblog.west-wind.com/posts/2012/May/30/Rendering-ASPNET-MVC-Views-to-String文字列で表示するレンダリング

ただし、コードのこの部分で問題が生じています:

public ViewRenderer(ControllerContext controllerContext = null) 
{ 
    // Create a known controller from HttpContext if no context is passed 
    if (controllerContext == null) 
    { 
     if (HttpContext.Current != null) 
      controllerContext = CreateController<ErrorController>().ControllerContext; 
     else 
      throw new InvalidOperationException(
       "ViewRenderer must run in the context of an ASP.NET " + 
       "Application and requires HttpContext.Current to be present."); 
    } 
    Context = controllerContext; 
} 

Visual Studioは私に次のエラーを与えている:

"The type or namespace name 'ErrorController' could not be found (are you missing a using directive or an assembly reference?)"

Amはおそらく行方不明明らかなものだが、それが何かを見ることはできない。何か案は?

+1

プロジェクトで 'ErrorController'を持っていますか? – NightOwl888

+0

いいえ、これは標準化されたコントローラーであれば追加できますか、それとも作成しなければならないかわかりませんでした。 – HuwD

答えて

5

ビューを文字列としてレンダリングする必要がある場合は、ここで作成したコントローラの拡張メソッドがあります。

NB:私はこれを手伝ってくれた正確なリンクを見つけて、見つけたら自分の答えを更新します。

Hereは、この方法を説明する別のリンクです。

これはトリックを行う必要があります。

public static string RenderViewToString(this Controller controller, string viewName, object model) 
    { 
     var context = controller.ControllerContext; 
     if (string.IsNullOrEmpty(viewName)) 
      viewName = context.RouteData.GetRequiredString("action"); 

     var viewData = new ViewDataDictionary(model); 

     using (var sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(context, viewName); 
      var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw); 
      viewResult.View.Render(viewContext, sw); 

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

あなたは、コントローラからこれを呼び出したい場合は、単純に次の操作を行います。

var strView = this.RenderViewToString("YourViewName", yourModel); 
+0

おかげさまで、私のプロジェクトでは少し微調整が必​​要でしたが、他は必要なものを正確に行いました。 – HuwD

+0

エンコーディングを設定する方法はありますか?私のenlishビューではうまくいきますが、spanishのビュー(utf8)もあり、アクセント付きのすべての文字はエンコードされたansiとしてレンダリングされます。 PPgaseの代わりにngase。私はweb.configでグローバリゼーションfileEncoding = "utf-8"を設定しようとしましたが、サブクラス化されたエンコーディングテキストライターを使用しています。 – alexb

関連する問題