私はMVCを初めて使用し、一般的な問題であると予想されるものを実装しようとしています。サイトの各ページに実装したい簡単な検索フォームがあります。このセクションで独自のコードを維持して、各ページでコードを複製する必要がないようにします。
これまでのところ、テンプレートページでレンダリングアクションを呼び出すことでこれを行うことができました。レンダリングアクションにより、クイック検索フォームにデータが入力されます。フォームを送信すると、フォームを検証できますが、検証情報を使用して同じページを再表示する方法が見つかりません。フォーム領域を更新するだけの方法が望ましいですが、ページが再表示される限り、完全なポストバックを受け入れます。
テンプレートレンダリング呼び出し
@{Html.RenderAction("Display", "QuickSearch");}
ActionController
[HttpPost]
public ActionResult Submit(QuickSearchModel qsModel)
{
if (!ModelState.IsValid)
{
return PartialView(qsModel);
}
//Perform redirect
}
[ChildActionOnly]
public ActionResult Display()
{
//populate model
return View(qsModel);
}
クイック検索ビュー
<div>
@using (Html.BeginForm("Submit", "QuickSearch"))
{
@Html.ValidationSummary(true)
@Html.LabelFor(m => m.Destination)@Html.EditorFor(m => m.Destination)@Html.ValidationMessageFor(m => m.Destination)<br />
@Html.LabelFor(m => m.ArrivalDate)@Html.EditorFor(m => m.ArrivalDate)@Html.ValidationMessageFor(m => m.ArrivalDate)
@Html.LabelFor(m => m.DepartureDate)@Html.EditorFor(m => m.DepartureDate)@Html.ValidationMessageFor(m => m.DepartureDate)<br />
@Html.LabelFor(m => m.Adults)@Html.DropDownListFor(model => model.Adults, new SelectList(Model.AdultsSelectOptions, "value", "text", Model.Adults))<br />
@Html.LabelFor(m => m.Children)@Html.DropDownListFor(model => model.Children, new SelectList(Model.ChildrenSelectOptions, "value", "text", Model.Children))<br />
<input id="qsSubmit" name="qsSubmit" type="submit" value="Submit" />
}
</div>
よろしくお願いします!