我在视图中创建了一个模型,一些字段和一个按钮:
查看:
@model IEnumerable<EnrollSys.Employee>
@foreach (var item in Model)
{
@Html.TextBoxFor(modelItem => modelItem.name)
}
<input type="submit" value="Save" class="btn btn-default" style="width: 20%" />
控制器:
public ActionResult Index()
{
var model = selectModels();
return View(model);
}
[HttpPost]
public ActionResult Save(IEnumerable<EnrollSys.Employee> model)
{
return View();
}
问题是:
为什么&#34;保存&#34;行动没有被解雇?
答案 0 :(得分:3)
您需要<form>
元素来回发您的控件。在您的情况下,您需要指定操作名称,因为它与生成视图的方法(Index()
)
@using (Html.BeginForm("Save"))
{
.... // your controls and submit button
}
现在这将回发到您的Save()
方法,但是模型将为null,因为您的foreach
循环正在生成重复的name
属性而没有索引器意味着它们无法绑定到集合(由于重复的id
属性,它也会创建无效的html)。
您需要使用for
循环(模型必须实施IList
)或EditorTemplate
类型的自定义Employee
。
使用for循环
@model IList<EnrollSys.Employee>
@using (Html.BeginForm("Save"))
{
for (int i = 0; i < Model.Count; i++)
{
@Html.TextBoxFor(m => m[i].name)
}
<input type="submit" value="Save" class="btn btn-default" style="width: 20%" />
}
使用EditorTemplate
在/Views/Shared/EditorTemplates/Employee.cshtml
@model EnrollSys.Employee
@Html.TextBoxFor(m => m.name)
并在主视图中
@model IEnumerable<EnrollSys.Employee> // can be IEnumerable
@using (Html.BeginForm("Save"))
{
@Html.EditorFor(m => m)
<input type="submit" value="Save" class="btn btn-default" style="width: 20%" />
}