21

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

これを達成する方法はありますか?私が読んだ限りでは、それは不可能ですが、その情報は少し古くなっています。それが不可能な場合、最良の代替手段は何ですか?

4

1 に答える 1

35

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

于 2015-09-17T10:38:22.287 に答える