web-dev-qa-db-ja.com

Ajaxリフレッシュの代替ビューコンポーネント

さまざまなページに埋め込まれた再利用可能なビジネスロジックを含むビューコンポーネントがあります。これは問題なく機能しています。ただし、今はajaxを使用してビューコンポーネントを更新する必要があります。

これを達成する方法はありますか?私が読んだものから、それは不可能ですが、その情報は少し時代遅れでした。それが不可能な場合、最善の代替策は何ですか?

19
czuroski

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によって提案された回避策としてビューを作成するか、 これらの回答 で説明されているアプローチを使用できました。

31
Daniel J.G.