获取列表<视图模型>从视图到控制器
本文关键字:视图 控制器 模型 列表 获取 | 更新日期: 2023-09-27 18:30:48
我有一个View
,可以编辑ViewModel
的List
。代码一直工作到显示功能为止。但是我无法从视图中取回同一列表中的值。
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 "的表达式
我也无法理解其中某些标签的用法,例如AntiForgeryToken
、HiddenFor
等。因此,如果可能的话,请有人提出一个简单的解决方案或更好的解释。
编辑 2 : 我将@model IEnumerable<ViewModel>
更改为@model List<ViewModel>
,并且错误无法将 [] 索引应用于类型为"System.Collections.Generic.IEnumerable "的表达式已得到纠正。
编辑3:我能够将Textbox
的值和CheckBox
获取到控制器中,但RadioButton
并DropDownList'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>
}
}
}
我建议:
- 使用强类型视图
- 使用
for(i = 0; ...; ...)
循环,否则它不会简单地工作
另一种方法是(请不要使用这种方法):
- 在JS发布事件上创建列表的JSON数组
- 使用此数据向控制器发送 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>
}
在提交表单时,当您使用模型列表时,您可以轻松获得它。