.NET Core でビューを文字列として返す
問題:
利用可能な記事の多くは、 ASP.NET でビューを文字列にレンダリングするためのガイダンスですが、.NET Core に特化したものではありません。 .NET Core 実装では、変換を試行してもコンパイル エラーが発生します。
Using ステートメント:
この問題に対処するには、次の using ステートメントが必要です:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewEngines; using Microsoft.AspNetCore.Mvc.ViewFeatures; using System.IO; using System.Threading.Tasks;
プロジェクト.json依存関係:
対応する project.json 依存関係は次のとおりです。
{ "dependencies": { "Microsoft.AspNetCore.Mvc": "1.1.0", ... }, }
コントローラー拡張メソッド:
次の拡張メソッドを使用できます。 .NET でビューを文字列としてレンダリングするために実装されています。コア:
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false) { if (string.IsNullOrEmpty(viewName)) { viewName = controller.ControllerContext.ActionDescriptor.ActionName; } controller.ViewData.Model = model; using (var writer = new StringWriter()) { IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine; ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial); if (viewResult.Success == false) { return $"A view with the name {viewName} could not be found"; } ViewContext viewContext = new ViewContext( controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions() ); await viewResult.View.RenderAsync(viewContext); return writer.GetStringBuilder().ToString(); } }
使用例:
拡張メソッドは、次の構文を使用してコントローラー内から呼び出すことができます:
viewHtml = await this.RenderViewAsync("Report", model);
部分的なビューの場合:
partialViewHtml = await this.RenderViewAsync("Report", model, true);
このソリューションは、モデル、ビュー検索時のエラー処理、非同期操作。
以上が.NET Core でビューを文字列としてレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。