ASP.NET Core の Html.RenderAction に相当する質問

ASP.NET Core の Html.RenderAction に相当する質問

小さな ASP.NET MVC 4 アプリケーションから ASP.NET Core に切り替えようとしています。

私の MVC 4 アプリケーションには、RenderSection を次のように使用するレイアウト ファイルがあります。

@RenderSection("xyz", required: false)

次に、インデックス ファイルに次の内容を含めます。

@section xyz{
        @{Html.RenderAction("abc");}
    }

そこで、Index からコントローラー アクション メソッド abc() を呼び出しています。メソッド abc() はモデル オブジェクトを渡し、そのモデルを含む部分ビューを返します。モデルを渡す必要があるため、RenderPartial は使用できません。

現在、ASP.NET Core には RenderAction() メソッドがありません。

私の質問は、インデックス ファイルからコントローラー アクション メソッドを呼び出すにはどうすればよいかということです。そのための HTML ヘルパーは他に何かありますか (見つかりませんが)?

ベストアンサー1

最終的に ViewComponent で実行できました。そこで、RenderAction() の代わりに次の操作を実行しました。

@section xyz{
        @await Component.InvokeAsync("abc")
    }

ここで、abc は abcViewComponent というクラスです。ViewComponent は次のようになります。

public class abcViewComponent : ViewComponent
    {
        private DbContextOptions<MyContext> db = new DbContextOptions<MyContext>();
        public async Task<IViewComponentResult> InvokeAsync()
        {
            MyContext context = new MyContext(db);
            IEnumerable<tableRowClass> mc = await context.tableRows.ToListAsync();
            return View(mc);
        }
    }

次に、新しいフォルダ「abc」の下にViews/Home/Components/abc/Default.cshtmlというビューを作成しました。

ビュー名は Default.cshtml であり、それが動作方法であることに注意してください。もっと良い解決策があれば、教えてください。

ViewComponent を紹介していただきありがとうございます。

おすすめ記事