0

私の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になります。ただし、最初にページが読み込まれると、オブジェクトも読み込まれ、正しい情報が表示されます。

誰かが私を助けることができますか?ありがとうございました!

4

1 に答える 1

1

フォームには、サーバーにポストバックする値は実際にはありません。これらのいくつかを含めます:

@Html.DisplayFor()

しかし、それらはフォーム要素を作成しません。表示する値を出力するだけです。モデルのプロパティには、おそらくこれらのいくつかを含める必要があります。

@Html.HiddenFor()

form(タグ内にあることを確認してください。)

これによりinput、レンダリングされたHTMLにいくつかの要素が作成され、アクションメソッドへのPOSTに含まれます。それ以外の場合、input要素がないと、HTMLformは空になり、サーバーにPOSTするものは何もありません。

于 2013-03-06T20:56:08.350 に答える