2015-09-16 19 views
12

私は、さまざまなページに埋め込まれた再利用可能なビジネスロジックを含むビューコンポーネントを持っています。これはうまくいきました。しかし、私は今、ajaxを使ってビューコンポーネントをリフレッシュする必要があります。ajaxリフレッシュの代替コンポーネント代替

これを行う方法はありますか?私が読んだことから、それは不可能ですが、その情報は少し時代遅れでした。 できない場合は、何が最良の選択肢ですか?

+0

に記載されているアプローチを@eedamによって提案された回避策としてビューを作成したり、使用することができます。.. AJAX新鮮なコンテンツを取得するURLが必要です。これはコントローラにアクションを追加することを意味します。そのアクションは、ViewComponentを呼び出すビューを持つことができます。 – eadam

答えて

22

ベータ7上では、コントローラから直接ViewComponentを返すことができるようになりました。 MVCの新しいViewComponentResultは、それが簡単にアクションからViewComponentの結果 を返すようになりますthe announcement

のMVC /カミソリのセクションを確認してください。これにより、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"); 
} 

をそして、私の迅速かつ汚いアヤックスよりも良い仕事を

だからあなたは、このような単純なビューコンポーネントを持つことができますリフレッシュ:

var container = $("#myComponentContainer"); 
var refreshComponent = function() { 
    $.get("/Home/MyViewComponent", function (data) { container.html(data); }); 
}; 

$(function() { window.setInterval(refreshComponent, 1000); }); 

もちろん、ベータ7あなただけの思考としてthese answers

+0

この回答をありがとう。ちょっとした時間がかかっていたので、私の問題を解決したコントローラーからpartialViewを返すルートに行きました。ベータ7に移行すると、このソリューションに戻ってリファクタリングすることがあります。 – czuroski

+0

こんにちは!あなたはあなたのjavascriptの詳細な例を投稿できますか?私は古い@Ajaxヘルパーを使用できませんか? –

+0

私が知る限り、Ajaxヘルパーは依然として[バックログ](https://github.com/aspnet/Mvc/issues/2015)の一部です。 JSについては、3番目のコードスニペットは、ビューコンポーネントを含むHTMLの部分をリフレッシュする必要がある最も単純なJSです –