コントローラー拡張機能を使用して .NET Core でビューを文字列としてレンダリングする
この記事は、ビューをレンダリングするための既存のコードを変換する際に役立つことを目的としています。 ASP.NET の文字列を使用して .NET Core とシームレスに連携します。
提供されたコードRenderViewToString メソッドを呼び出す Controller メソッドを想定しています。ただし、.NET Core に適応させると、コンパイル エラーが発生する可能性があります。この記事では、.NET Core 向けに特別に設計されたコードの修正バージョンを示します。
修正コード:
次のコード スニペットは、RenderViewToString メソッドの拡張バージョンを提供します。コントローラー拡張子:
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; namespace CC.Web.Helpers { public static class ControllerExtensions { 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);
PartialView:
partialViewHtml = await this.RenderViewAsync("Report", model, true);
注:
以上が.NET Core コントローラーでビューを文字列としてレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。