2

の をView編集できる がListありViewModelます。コードは表示機能まで機能します。しかし、同じリストの値をビューから取得できません。

        public ActionResult Funtion()
        {
            List<ViewModel> ViewModel= (List<ViewModel>)TempData["ViewModel"];
            return View(ViewModel);
        }

        [HttpPost]
        public ActionResult UserFormSubmission(List<ViewModel> ViewModel)
        {    
            return View();
        }        

POST 関数のリストの値が null です。ビューからコントローラーに値を取得するにはどうすればよいですか。

編集:チェックボックスの状態を含む MVC で IEnumerable リストをコントローラーに渡す方法 に関する質問への解決策に記載されているソリューションを使用してみました。. しかし、次のエラーが発生しました。

タイプ 'System.Collections.Generic.IEnumerable の式に [] を使用したインデックス作成を適用することはできません

AntiForgeryTokenまた、 、 などの特定のタグの使用法を理解できませんHiddenForでした。可能であれば、誰かが簡単な解決策またはより良い説明を考え出してください。

EDIT 2 :に変更@model IEnumerable<ViewModel>@model List<ViewModel>、エラー Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable has been modified.

編集 3: との値をコントローラーに取得できましたTextboxCheckBoxRadioButton[ DropDownList's selected values cant be identified at theHttpPost]` 関数は? ここで何が欠けていますか?

@for (i = 0; i < Model.Count(); ++i)
{
 if (Model[i].TypeId == 4)
                    {
                        //radiobutton
                        for (int j = 0; j < Model[i].Options.Count(); ++j)
                        {
                    <div>
                        @Html.HiddenFor(m => m[i].Options[j].OptionId)                        
                        @Html.HiddenFor(m => m[i].Options[j].OptionValue)
                        @Html.HiddenFor(m => m[i].Options[j].Id)

                        @Html.RadioButtonFor(m => m[i].Options[j].Value, @Model[i].Options[j].DisplayText)
                        @Html.DisplayFor(m => m[i].Options[j].DisplayText)
                    </div>

                        }
                    }
}
4

3 に答える 3

1

#theghostofc が示唆しているように、 for を使用してインデックスベースのループとコントロールを使用して、コントロールを生成できます。

for(int i=0;i<Model.Count;i++)
{
<tr>
<td>
  @Html.TextBoxFor(model=>Model[i].Text)
</td>
<tr>    
}

モデルのリストを使用したため、フォームを送信すると、簡単に取得できます。

于 2013-09-10T02:40:40.643 に答える