小さな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ヘルパーはありますか(ただし、表示されません)。
。
私はついに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);
}
}
次に、Views/Home/Components/mc/Default.cshtmlとして新しいフォルダー「mc」の下にビューを作成しました
ビュー名はDefault.cshtmlであり、それがどのように機能するかに注意してください。誰かがより良い解決策を持っているなら、私に知らせてください。
ViewComponentの方向を教えてくれてありがとう。
上記の質問を完了するために、おそらく次のようにViewComponentクラスの名前を渡す方が安全です。
@section xyz{
@await Component.InvokeAsync(nameof(yournamespace.abc))
}
結果のビューとして「デフォルト」を使用するのが一般的ですが、デフォルトと異なる場合はビュー名を返すこともできます。
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("YourViewName", mc);
}
}
回避策があります。Url.Action+ JQueryを使用してコンテンツをレンダリングできます。
アクションをレンダリングするビューは次のようになります。
<div id="dynamicContentContainer"></div>
<script>
$.get('@Url.Action("GetData", "Home")', {id : 1}, function(content){
$("#dynamicContentContainer").html(content);
});
</script>
ホームコントローラー:
[HttpGet]
public IActionResult GetData(int id)
{
return PartialView(id);
}
景色
@model int
<span>Values from controler :</span> @Model
リクエストをさらに制御したい場合は、ここで詳細情報を読むことができます: jQuery.get()