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

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 19:05:40297ブラウズ

How to Render Views as Strings in .NET Core?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。