2

ビュー内の配列からすべてのデータをコントローラーに戻そうとしています。ViewModel を使用してこれを行う方法がわかりません。

モデル クラス

public class ResultsViewModel
{
    public int?[] ProgramIds { get; set; }

}

ビュー内のフォーム

@using (Html.BeginForm("ExportCsv", "SurveyResponse", FormMethod.Post))

{

   // Should I be looping through all values in the array here?
    @Html.HiddenFor(x => x.ProgramIds)

    <input type="submit" value="Submit" />
}

投稿先のコントローラー

        [HttpPost]
        public ActionResult ExportCsv(ResultsViewModel ResultsViewModel)
        {

        }
4

2 に答える 2

3

ここで配列内のすべての値をループする必要がありますか?

はい。ただし、@Html.HiddenFor(..) は使用しないでください。同じ ID を持つコントロールが生成されるため、無効な HTML が生成されるようです。

<input id="ProgramIds" name="ProgramIds" type="hidden" value="3" />
<input id="ProgramIds" name="ProgramIds" type="hidden" value="4" />

代わりに、リストをループして、独自の非表示の html フィールドを作成します。

for (var i = 0; i < Model.ProgramIds.Length; i++) 
{ 
    <input type="hidden" name="ProgramIds[@i]" value="@Model.ProgramIds[i]" />
}

Scott Hanselman は、これに関するブログ投稿を書いています: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

于 2012-10-11T00:18:55.770 に答える
1

Should I be looping through all values in the array here?

はい、これを試してください:

for (var i = 0; i < Model.ProgramIds.Length; i++) 
{ 
    @Html.HiddenFor(x => Model.ProgramIds[i]) 
} 
于 2012-10-10T23:03:28.947 に答える