获取列表<视图模型>从视图到控制器

本文关键字:视图 控制器 模型 列表 获取 | 更新日期: 2023-09-27 18:30:48

我有一个View,可以编辑ViewModelList。代码一直工作到显示功能为止。但是我无法从视图中取回同一列表中的值。

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

POST 函数的列表中的值为空。我怎样才能将值从视图中获取到控制器中。

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

无法将带有 [] 的索引应用于类型为"System.Collections.Generic.IEnumerable "的表达式

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

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

编辑3:我能够将Textbox的值和CheckBox获取到控制器中,但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>
                        }
                    }
}

获取列表<视图模型>从视图到控制器

我建议:

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

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

  1. 在JS发布事件上创建列表的JSON数组
  2. 使用此数据向控制器发送 AJAX POST 请求

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

正如

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

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

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