我有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。 我如何从视图中获取值到Controller。
编辑: 我尝试使用提到的解决方案来解决问题How to pass IEnumerable list to controller in MVC including checkbox state?。但是遇到了以下错误:
无法将带有[]的索引应用于类型为'System.Collections.Generic.IEnumerable
的表达式
此外,我无法理解其中某些标签的用法,例如AntiForgeryToken
,HiddenFor
等。
所以如果可能的话,请提出一个简单的解决方案或更好的解释。
编辑2:我将@model IEnumerable<ViewModel>
更改为@model List<ViewModel>
并且错误无法将带有[]的索引应用于类型为'System.Collections.Generic.IEnumerable'的表达式纠正。
编辑3:
我能够将Textbox
和CheckBox
的值加到Controller中,但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>
}
}
}
答案 0 :(得分:3)
我建议:
for(i = 0; ...; ...)
循环,否则它将无法正常使用另一种方法可能是(请不要使用此方法):
答案 1 :(得分:1)
您需要使用索引器而不是foreach语句来允许mvc构建您的列表。 类似的问题已经被问到How to pass IEnumerable list to controller in MVC including checkbox state?
答案 2 :(得分:1)
正如#theghostofc建议你可以使用基于索引的循环和控件使用for来生成控件 例如
for(int i=0;i<Model.Count;i++)
{
<tr>
<td>
@Html.TextBoxFor(model=>Model[i].Text)
</td>
<tr>
}
在使用模型列表时,在表单提交时,您可以轻松获取它。