MVC アプリを作成していて、フォームを送信したいと考えています。だから私はこのような簡単なことをしました。「DisplayItems」ビューは次のとおりです。
@model List<MyApp.Models.Inventory>
@{
ViewBag.Title = "Display Items";
}
@using (Html.BeginForm())
{
<table>
<tr>
<th>Object Name</th>
<th>Number In Stock</th>
<th>Quantity To Send</th>
<th>Reserved for First Template</th>
<th>Reserved for Second Template</th>
<th>Reserved for Third Template</th>
<th>Number so far</th>
<th>Input quantity</th>
</tr>
@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td>@Html.DisplayFor(_x => _x[i].m_Obj.m_ObjName)</td>
<td>@Html.DisplayFor(_x => _x[i].m_QtyToSendShow)</td>
<td>@Html.DisplayFor(_x => _x[i].m_NbInStock)</td>
<td>@Html.DisplayFor(_x => _x[i].m_QtyFirstTemplate)</td>
<td>@Html.DisplayFor(_x => _x[i].m_QtySecondTemplate)</td>
<td>@Html.DisplayFor(_x => _x[i].m_QtyThirdTemplate)</td>
<td>@Html.DisplayFor(_x => _x[i].m_QtyHold)</td>
<td>@Html.TextBoxFor(_x=>_x[i].m_QtyToSend)</td>
</tr>
}
</table>
<input type="submit" name="_submitButton" value="Confirm"/>
}
特別なことは何もありません。ただし、ユーザーが「確認」ボタンをクリックすると、アプリケーションは、ユーザーが検索を指定するためのフィルター エンジンである PREVIOUS ビューに戻り続けます。
「SendItems」という名前の以前のビューを次に示します。
@{
ViewBag.Title = "Send items";
}
<h2>Send Items</h2>
<p>
@using (Html.BeginForm())
{
Html.RenderAction("AdvancedSearch", "PartialViews");
}
@Html.ActionLink("Back to Selection", "MenuSelection")
</p>
部分ビューは、多くのフィールドと入力ボタンを持つモデルにバインドされたビューです。ボタン入力がクリックされると、コントローラー メソッドは次のようにヒットします。
public ActionResult SendItems(SearchEngineObject _searchObj, string _submitButton)
{
if (_submitButton == "Search")
{
bool isValid = ValidateSearchFields(_searchObj);
if (!isValid)
{
ViewData["ErrorMessage"] = m_MessageError;
return View();
}
m_ListToManage = m_InventoryManager.ListAvailableInventoryItems(_searchObj);
if (m_ListInventoryToManage.Count == 0)
{
ViewData["ErrorMessage"] =
"There are no inventory items belonging to the parameters you selected; " +
"please change your values and try again.";
return View();
}
return View("DisplayItems", m_ListInventoryToManage);
}
return View();
}
したがって、SendItems ビューからの入力ボタンがヒットすると、コントローラーはフィールドを検証し、フィルターに基づいて在庫アイテムのリストを取得し、それを「DisplayItems」ビューに送信します。
しかし、ビューに新たに到着し、「確認」ボタンをクリックすると、「SendItems」ビューに直接戻りますが、「DisplayItems」コントローラーメソッドに移動したいです。なんで?誰かが私が間違ったことを説明できますか?
編集
簡単なデバッグ セッションを行ったところ、デバッグによって「DisplayItems」メソッドではなく、「Send Items」コントローラー メソッドに戻ることが確認できました。