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 函数的 List 中的值为 null。我如何从视图中获取值到控制器中。

编辑: 我尝试使用提到的解决方案来解决问题如何将 IEnumerable 列表传递给 MVC 中的控制器,包括复选框状态?. 但是遇到以下错误:

无法使用 [] 将索引应用于“System.Collections.Generic.IEnumerable”类型的表达式

我也无法理解其中某些标签的用法,例如AntiForgeryToken,HiddenFor等。所以如果可能的话,请有人提出一个简单的解决方案或更好的解释。

编辑 2:我更改@model IEnumerable<ViewModel>@model List<ViewModel>错误无法将 [] 索引应用于类型为 'System.Collections.Generic.IEnumerable 的表达式已得到纠正。

编辑 3: 我能够获取控制器的值TextboxCheckBox进入控制器,但是RadioButtonDropDownList's selected values cant be identified at the[HttpPost]` 函数?我在这里想念什么?

@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

3

我建议:

  1. 使用强类型视图
  2. 使用for(i = 0; ...; ...)循环,否则它不会简单地工作

另一种方法可能是(请不要使用这种方法):

  1. 在 JS 发布事件上创建列表的 JSON 数组
  2. 使用此数据向控制器发送 AJAX POST 请求
于 2013-09-09T10:47:08.447 回答
1

您需要使用索引器而不是 foreach 语句来允许 mvc 重新构建您的列表。类似的问题已经被问到如何将 IEnumerable 列表传递给 MVC 中的控制器,包括复选框状态?

于 2013-09-09T09:29:09.157 回答
1

正如#theghostofc 所建议的那样,您可以使用基于索引的循环和控件来生成控件,例如

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

在使用模型列表提交表单时,您可以轻松获得它。

于 2013-09-10T02:40:40.643 回答