【发布时间】:2014-09-25 14:07:29
【问题描述】:
我完全不知道为什么模型在提交表单后为空.....我检查了 FormCollection,但它只包含“ScriptAssignments.Assigned”。我使用的是强类型视图,并且我使用的是 beginform....我没有弄错这里...我将不胜感激。
这就是视图的样子.....
@model Models.ScriptAssignmentMatrix
@{
ViewBag.Title = "Script Matrix";
}
<link href="@Url.Content("~/Content/RotatedHeaders.css")" rel="stylesheet" type="text/css" />
<h1>Assignment Matrix</h1>
@using (Html.BeginForm("SaveChanges", "ScriptMatrix",FormMethod.Post)) {
<div style=" height:15px"></div>
<table class="table table-striped table-header-rotated">
<thead>
<tr>
<th></th>
@foreach (var header in Model.ColumnHeaders)
{
<th>
<div class="container"><div class="head"><div class="vert">
<span style="font-size: 10pt">
@Html.DisplayFor(modelItem => header)
</span>
</div></div></div>
</th>
}
</tr>
</thead>
<tbody>
@foreach (var row in Model.RowHeaders)
{
<tr>
<td>
<span style="font-size: 10pt; background: #eee; ">
@Html.DisplayFor(modelItem => row)
</span>
</td>
@foreach (var header in Model.ColumnHeaders)
{
var ScriptAssignments = (from y in Model.ScriptAssignments
where y.AgentName == row && y.ScriptName == header
select y).First();
<td>
@Html.CheckBoxFor(Assignment => ScriptAssignments.Assigned)
</td>
}
</tr>
}
</tbody>
</table>
<div style=" height:30px"></div>
<input type="submit" value="Save Changes" />
<div style=" height:30px"></div>
@ViewBag.Result
}
这是控制器:
[HttpPost]
public ViewResult SaveChanges(ScriptAssignmentMatrix model)
{
ViewBag.Result = "Your changes have been saved";
return View("Index", model);
}
这是 ScriptAssignmentMatrix 类:
public class ScriptAssignmentMatrix
{
public List<ScriptAssignmentMatrixElement> ScriptAssignments { get; set; }
public List<String> ColumnHeaders { get; set; }
public List<String> RowHeaders { get; set; }
}
public class ScriptAssignmentMatrixElement
{
public int ScriptId { get; set; }
public string ScriptName { get; set; }
public int AgentId { get; set; }
public string AgentName { get; set; }
public bool Assigned { get; set; }
}
【问题讨论】:
-
foreach可能有问题。请改用for循环。见this post。 -
DisplayFor不会创建input元素。要修复它,请在每个DisplayFor之后使用HiddenFor -
DisplayFor 仅用于表头...需要保存在模型中的数据在嵌套的 foreach 中
-
在我在嵌套 foreach 中使用 CheckboxFor 的少数经验中,它的工作方式是使用 for 循环作为 @gunr2171 注释。试一试。
-
如果您不使用
HiddenFor字段发布标头值,模型绑定可能不会正确发生。 MVC 喜欢在发布期间取回所有模型字段以进行绑定。尝试添加隐藏字段,看看会发生什么。
标签: c# asp.net asp.net-mvc