1

リストモデルで構成されたフォームがあります。フォームがアクション メソッドに送信されると、リストは null になります。どうすればこれを設定できますか?

public ActionResult PendingRenewals()
{
    //get list elements
    var customers = get customer that match our criteria;

    //Build list
    List<string[]> renewals = new List<string[]>();
    foreach(var item in customers)
    {
        renewals.Add(new string[] {item.name, item.id, item.PO });
    }
    return View(renewals);
}

意見

   @model List<string[]>
   @using (Html.BeginForm()
   {
       <input type="submit" value="Save"/>
       <table>
           @foreach (var item in Model)
           {
               <tr>
                   <td>item[0]</td>
                   <td>item[1]</td>
                   <td>@Html.EditorFor(model => item[2])</td>
                   </td>
               </tr>
           }
    </table>
}

コントローラーに戻る

[HttpPost]
public ActionResult PendingRenewals(List<string[]> renewal, string EntityId)
{
    //renewals is always null
    return PendingRenewals();
}

解決

FortyTwo のアイデアを使用して、string[][] をモデルとして使用したため、ビューは次のようになり (model[i][0])、model[i][1] はコントローラーに戻す必要があるフィールドです。 ):

            @model string[][]
            @for (int i = 0; i < Model.Length; i++ )
            {
            <tr>
                <td>@Model[i][2]</td>
                <td>@Model[i][3]</td>
                <td>@Model[i][4]</td>
                <td>@Model[i][5]</td>
                <td>@Html.HiddenFor(model => model[i][0]) @Html.TextBoxFor(model => Model[i][1])</td>
            </tr>
        }
4

2 に答える 2

1

昔ながらの for ループを使用する必要があります。このように、インデクサーは、mvc のモデル バインダーに必要な命名規則を尊重するために使用されます。

@for (int i = 0; i < Model.Count; i++)
       {
           <tr>
               <td>Model[i].item[0]</td>
               <td>Model[i].item[1]</td>
               <td>@Html.EditorFor(model => model[i].item[2])</td>
               </td>
           </tr>
       }
于 2013-02-14T15:38:15.377 に答える
0

FortyTwo は、インデックスを使用してモデル バインダーの適切なフォーム データを取得する必要があることは正しいですが、これを行ったとしても、モデル バインダーがフォームから返信するデータを理解できるとは思いません。

いずれにせよ、文字列配列のリストを使用する代わりに、「顧客」タイプを作成し、モデルを顧客のリストに設定し、顧客タイプのプロパティのエディターを作成することをお勧めします。

于 2013-02-14T16:09:27.253 に答える