Return View()を介してMVCの複数のソースからのデータを表示するためのより良い方法はありますか?
私は基本的に2つの異なるソースに電話をかけ、結果を組み合わせることができる共通のコレクションを埋めました。それらを組み合わせる代わりに、両方のデータオブジェクトを返すことができるかどうか疑問に思っていましたか?
任意の提案をいただければ幸いです。
ありがとう、
S
Return View()を介してMVCの複数のソースからのデータを表示するためのより良い方法はありますか?
私は基本的に2つの異なるソースに電話をかけ、結果を組み合わせることができる共通のコレクションを埋めました。それらを組み合わせる代わりに、両方のデータオブジェクトを返すことができるかどうか疑問に思っていましたか?
任意の提案をいただければ幸いです。
ありがとう、
S
ビューに渡すために複数のコレクションまたは他のタイプを保持できるViewModelを使用するのが一般的です。
強く型付けされたビューが必要ない/必要ない場合は、ViewBagまたはViewDataを使用して、複数のコレクションをビューに渡すこともできます。
public ActionResult Index()
{
ViewData["GratuitousGuid"] = Guid.NewGuid();
ViewBag.Products = ProductService.GetProducts();
ViewBag.Countries = CountryService.GetCountries();
ViewBag.Zombies = ZombieService.GetZombies();
return View();
}
複数のアクションを使用して、さまざまなソースをPartialView
sとしてレンダリングし、それらを1つにまとめることができます。View
例:
HomeController.cs
public ActionResult Foo() {
return PartialView(repository.GetFoo());
}
public ActionResult Bar() {
return PartialView(repository.GetBar());
}
public ActionResult Index() {
return View();
}
Index.cshtml
<div id='foo'>
@Html.Action("Foo")
</div>
<div id='bar'>
@Html.Action("Bar")
</div>
Foo.cshtmlとBar.cshtmlは、各モデルのデータを表示するPartialViewsになります。
補遺
私がこの方法が好きなもう1つの理由は、AJAXの更新に適していることです。たとえば、ページのBarセクションを更新する必要がある場合は、jQueryを使用して次のように記述できます。
$('#bar').load('/home/bar', function (html) {
//Set up your returned data here (callbacks and the like)
});
完全な更新を実行する必要はありません