ASP.NET Core では、ビューの文字列としてのレンダリングは、レポートや動的コンテンツ生成などのシナリオでよく必要となる重要な機能です。 、またはテスト。この記事では、.NET Core でこれを実現するプロセスを説明し、既存のコードを ASP.NET から .NET Core に変換する際に直面する特定の問題に対処します。
.NET Core でビューを文字列としてレンダリングするには、コントローラー拡張メソッドを作成するのが効果的な方法です。このメソッドは、アプリケーション内の任意のコントローラーからビューにアクセスしてレンダリングするための便利な方法を提供します。実装例を次に示します。
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 CoreApp.Helpers { public static class ControllerExtensions { public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false) { // Handle missing view name if (string.IsNullOrEmpty(viewName)) { viewName = controller.ControllerContext.ActionDescriptor.ActionName; } // Set the view data controller.ViewData.Model = model; using (var writer = new StringWriter()) { // Obtain the view engine IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine; // Find the view ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial); // View not found if (viewResult.Success == false) { return $"A view with the name {viewName} could not be found"; } // Render the view ViewContext viewContext = new ViewContext( controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions() ); await viewResult.View.RenderAsync(viewContext); // Return the rendered view as a string return writer.GetStringBuilder().ToString(); } } } }
拡張メソッドを使用するには、次のコードをコントローラに追加するだけです:
var viewHtml = await this.RenderViewAsync("Report", model);
レンダリング用部分的なビュー:
var partialViewHtml = await this.RenderViewAsync("Report", model, true);
提供された拡張メソッドには、元のコードに対するいくつかの拡張機能が含まれています。
このアプローチを利用すると、.NET Core でビューを文字列として簡単にレンダリングしてアクセスできるため、動的コンテンツが使用されるさまざまなシナリオに柔軟性が提供されます。生成が必要です。
以上がASP.NET Coreでビューを文字列としてレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。