1

Web ページのテーブル アイテムを編集し、それらをサーバーにポストする方法を理解するのに苦労しています。(実際には、この場合、複数の項目を選択しているかのように、ユーザーにチェックボックスを選択してもらいたいだけですが、それは単なる暗示です)。

問題は、ビューが Web ページに表示されている間、HttpPost で picSelections が null であることです。

これは私のビューの上部にあります:

@model IEnumerable<CarShow.lmit_pics>

@using (Html.BeginForm())
{    
<div style="width:100%; height:60px; ">
<input type="submit" value="Add Selected Photo(s) to Survey" />
</div>

    for (int i = 0; i < Model.Count(); i++)
    {
        var item = Model.ElementAt(i);
    <div style="width:296px; float:left">

            <div style="float:left; width:200px; margin-bottom:18px">

                @{string cropped = "../../../Content/Images/" + Html.DisplayFor(modelItem => item.picname).ToString() + "?" + Html.DisplayFor(modelItem => item.version).ToString();
                 }
                <img alt="picture" class="pic-size" src="@cropped" />
                <br />
                    @Html.EditorFor(modelItem => item.brand)
            </div>

</div>
        }    
}
</div>

これはコントローラーにあります:

public ActionResult AddSurveyPic(string id)
{
   var validPicSummaries = (IEnumerable)(from x in db.lmit_pics where x.enabled == 1 select x);
   return View((IEnumerable)validPicSummaries);
}

[HttpPost]
public ActionResult AddSurveyPic(IEnumerable<CarShow_MVC.lmit_pics> picSelections)
{
        // Save data here
}

ありがとう。

4

1 に答える 1

3

ビューにループを記述しないでください。エディター テンプレートを使用することをお勧めします。

@model IEnumerable<CarShow.lmit_pics>

@using (Html.BeginForm())
{    
    <div style="width:100%; height:60px; ">
        <input type="submit" value="Add Selected Photo(s) to Survey" />
    </div>
    @Html.EditorForModel()
}

次に、モデルの各要素に対して自動的にレンダリングされる、対応するエディター テンプレートを作成します~/Views/Shared/EditorTemplates/lmit_pics.cshtml。重要なテンプレートの名前と場所に注意してください。

@model CarShow.lmit_pics

<div style="width:296px; float:left">
    <div style="float:left; width:200px; margin-bottom:18px">
        @{string cropped = "../../../Content/Images/" + Html.DisplayFor(x => x.picname).ToString() + "?" + Html.DisplayFor(x => x.version).ToString(); }
        <img alt="picture" class="pic-size" src="@cropped" />
        <br />
        @Html.EditorFor(x => x.brand)
    </div>
</div>

また、コレクションとディクショナリをバインドするときに既定のモデル バインダーが使用する命名規則をよりよく理解するために、次の記事を読むこともできます。

于 2012-05-31T05:58:17.363 に答える