ヘッダーに必要な部分ビューを返す子アクションメソッドを用意し、このアクションメソッドをレイアウトで呼び出すことができます。
必要なプロパティのビューモデルを作成します。
public class AllPageVm
{
public int SelectedItem { set; get; }
public List<SelectListItem> Items { set; get; }
}
コントローラのいずれかでアクションメソッドを作成します。このアクションの方法をChildActionOnly
デコレータでマークしてください。
public class HomeController : Controller
{
[ChildActionOnly]
public ActionResult HeaderSearch()
{
var vm = new AllPageVm()
{
Items = db.States
.Select(a => new SelectListItem() {Value = a.Id.ToString(),
Text = a.Name})
.ToList()
};
return PartialView(vm);
}
HeaderSearch.cshtml
部分ビューでは、検索ヘッダーに必要なマークアップをレンダリングできます。ドロップダウンをレンダリングする簡単な例を次に示します。あなたが(例:テキストボックス、ドロップダウンボタンなどを持つフォームタグ)好きなマークアップ含めるには、この部分を更新することが
があなたのレイアウトで今
@model AllPageVm
<div>
<label>Select one state</label>
@Html.DropDownListFor(a => a.SelectedItem, Model.Items, "Select")
</div>
、あなたはアクションメソッド
<div class="container body-content">
@Html.Action("HeaderSearch", "Home")
@RenderBody()
<hr/>
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
この子を呼び出すことができます
Viewメソッドの代わりにHeaderSearch子アクションメソッドからPartialView
メソッドを呼び出すようにしてください。 Viewメソッドを呼び出すと、再帰的に同じメソッドが呼び出され、StackOverflow例外が発生します。
ありがとうございます!私が気づいていなかった新しい概念をカップルに紹介するための+1。私は私のコンピュータの前に戻ってすぐにこの解決策を試してみるが、一見すると完璧な意味がある。 –