我问了非常相似的问题,但现在我缩小了外部因素的范围,现在我希望有人能够指出我做错了什么以及为什么我没有得到预期的结果。
在我的控制器中,我从数据库中获取数据:
List<MCS_DocumentFields> model = (List<MCS_DocumentFields>)DocumentFieldService.GetFieldsForDocument(documentId);
进行一些排序并将列表传递给我的视图:
var finalModel = model
.OrderBy(c => c.ContentTypeId)
.ThenBy(c => c.RowNo)
.ThenBy(c => c.ColumnNo)
.ThenBy(c => c.MCS_Fields.Order)
.ToList();
return View(finalModel);
此时finalModel
属于类型List<MCS_DocumentFields>
。
我的看法是这样的:
@model List<DataAccess.MCS_DocumentFields>
@{
ViewBag.Title = "Document";
}
<div id="drawForm">
@using (Html.BeginForm("ActionMethodName", "Forms"))
{
<table border="1">
@for (int i = 0; i < Model.Count; i++)
{
if (!string.IsNullOrEmpty(Model[i].FieldValue))
{
<tr>
<td>
@Html.DisplayFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].Id)
</td>
</tr>
}
}
</table>
<button type="submit">Submit</button>
}
</div>
这是渲染,我在浏览器中看到大约 15 行数据。当我将数据提交给我的控制器时:
[HttpPost]
public ActionResult ActionMethodName(List<MCS_DocumentFields> collection)
{
var test = collection;
//Some other code
}
使用视图中的这个特定代码,我从页面上呈现的 15 条记录中返回 1 条记录。
但是,如果我像这样改变我的观点:
<table border="1">
@for (int i = 0; i < Model.Count; i++)
{
if (Model[i].ContentTypeId == 1)
{
<tr>
<td>
@Html.DisplayFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].Id)
</td>
</tr>
}
}
</table>
更具体地说 -if (Model[i].ContentTypeId == 1)
我得到 10 条记录(这个 ContentTypeId 确实有 10 条)
如果我做出这样的看法:
<table border="1">
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.DisplayFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].Id)
</td>
</tr>
}
</table>
根本不检查,只是迭代所有记录-我将所有记录(43)返回到我的控制器-什么都没有。
这非常令人困惑 - 我正在使用一个实体,只是检查不同的属性值并每次都得到不同的结果。如果我根本不执行任何检查,那么我会拿回所有东西......这可能是什么原因......?