さまざまなページに埋め込まれた再利用可能なビジネス ロジックを含むビュー コンポーネントがあります。これはうまくいきました。ただし、ajax を使用してビュー コンポーネントを更新する必要があります。
これを達成する方法はありますか?私が読んだ限りでは、それは不可能ですが、その情報は少し古くなっています。それが不可能な場合、最良の代替手段は何ですか?
さまざまなページに埋め込まれた再利用可能なビジネス ロジックを含むビュー コンポーネントがあります。これはうまくいきました。ただし、ajax を使用してビュー コンポーネントを更新する必要があります。
これを達成する方法はありますか?私が読んだ限りでは、それは不可能ですが、その情報は少し古くなっています。それが不可能な場合、最良の代替手段は何ですか?
beta7 では、ViewComponent をコントローラーから直接返すことができるようになりました。発表の MVC/Razor セクションを確認してください
MVC の新しい ViewComponentResult により、アクションから ViewComponent の結果を簡単に返すことができます。これにより、ViewComponent のロジックをスタンドアロン エンドポイントとして簡単に公開できます。
したがって、次のような単純なビュー コンポーネントを作成できます。
[ViewComponent(Name = "MyViewComponent")]
public class MyViewComponent : ViewComponent
{
public IViewComponentResult Invoke()
{
var time = DateTime.Now.ToString("h:mm:ss");
return Content($"The current time is {time}");
}
}
次のようなコントローラーでメソッドを作成します。
public IActionResult MyViewComponent()
{
return ViewComponent("MyViewComponent");
}
そして、私の迅速で汚い ajax 更新よりも優れた仕事をしてください。
var container = $("#myComponentContainer");
var refreshComponent = function () {
$.get("/Home/MyViewComponent", function (data) { container.html(data); });
};
$(function () { window.setInterval(refreshComponent, 1000); });
もちろん、beta7 より前は、@eedam によって提案された回避策としてビューを作成するか、これらの回答で説明されているアプローチを使用できます。