私のMVCアプリには、ユーザーがアイテムを送信する前にレビューする必要がある部分があります。彼はそれらのうちのいくつを送りたいかを選ばなければなりません。
これが私が書き留めたビューです:
@model MyApp.Models.ObjInfo
@{
ViewBag.Title = "Dispatch Item";
}
<h2>Dispatch Item</h2>
<h3>
<label>
For: @Html.DisplayFor(model => model.m_OtherObj.m_Name)
</label>
</h3>
@using (Html.BeginForm())
{
<fieldset>
<legend>OBJ_INFO</legend>
<table>
<tr>
<th>Obj Number <br/>
Obj Color <br/>
Mana Cost <br/>
(...)
</th>
<th>
@Html.DisplayFor(model => model.m_OtherObj.m_Name)<br/>
@Html.DisplayFor(model => model.m_OtherObj.m_Color)<br/>
(...)
</th>
</tr>
</table>
<p>
<span style="font-size: 1.2em">
Number In Stock: @Html.DisplayFor(model => model.m_NbStock)<br/>
Number already reserved (Ebay Auctions): @Html.DisplayFor(model => model.m_QtyAlreadyReserved)<br/>
</span>
</p>
<p>
Number items to dispatch: <input type="number" min="0" max="99" name="numberSent" value="int" step="0"/>
</p>
<input type="submit" value="Save"/>
</fieldset>
}
<span style="color:red; font-size: 1.7em; font-style: italic;">@ViewData["ErrorMessage"]</span>
@using (Html.BeginForm()) {
<p>
@Html.ActionLink("Back to listing", "SearchIndex")
</p>
}
さて、あなたはアイデアを得る。つまり、アプリをロードしてこのページに移動し、[保存]ボタンをクリックするたびに、メソッドの署名に問題がない場合でも、アイテムはNULLになります。
[HttpPost]
public ActionResult DispatchItem(ObjInfo itemToSend, int? numberSent)
{
if (ModelState.IsValid)
{
if (numberSent == null)
{
ViewData["ErrorMessage"] = "Please put a value in the 'Number items to dispatch' field. Thank you.";
return View(itemToSend);
}
if (numberSent > itemToSend.m_NbStock)
{
ViewData["ErrorMessage"] = m_TooManyItems;
return View(itemToSend);
}
}
return RedirectToAction("SearchIndex");
}
したがって、前述したように、最初の行に到達するたびに、オブジェクトはnullになります。ただし、最初にページが読み込まれると、オブジェクトも読み込まれ、正しい情報が表示されます。
誰かが私を助けることができますか?ありがとうございました!