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

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

Linda Hamilton
リリース: 2025-01-05 00:51:40
オリジナル
415 人が閲覧しました

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

コントローラー拡張機能を使用して .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);
ログイン後にコピー

注:

  • このコードにより、依存関係注入の必要がなくなります。
  • これは、 model.
  • これにより、ビューを部分または
  • 非同期操作をサポートします。

以上が.NET Core コントローラーでビューを文字列としてレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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