ホームページ > バックエンド開発 > C++ > ASP.NET Coreでビューを文字列としてレンダリングするにはどうすればよいですか?

ASP.NET Coreでビューを文字列としてレンダリングするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-05 03:18:39
オリジナル
965 人が閲覧しました

How to Render Views as Strings in ASP.NET Core?

.NET Core でのビューの文字列としてのレンダリング

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート