我在 asp.net MVC 3 项目中使用 Razor 创建的表单遇到了一个奇怪的问题。我的主要观点是类型的强类型:
@model List<DataAccess.MCS_DocumentFields>
我有四个部分视图,它们一个接一个地呈现创建表。这是主视图的代码...
<div id="drawForm">
<table border="1">
@for (int i = 0; i < Model.Count(); i++)
{
if (Model[i].ContentTypeId == 1)
{
headerModel.Add(Model[i]);
}
if (Model[i].ContentTypeId == 2)
{
drawModel.Add(Model[i]);
}
if (Model[i].ContentTypeId == 3)
{
bodyModel.Add(Model[i]);
}
if (Model[i].ContentTypeId == 4)
{
footerModel.Add(Model[i]);
}
}
@Html.Partial("_PartialHeadear", headerModel)
@Html.Partial("_PartialDrawing", drawModel)
@Html.Partial("_PartialBody", bodyModel)
@Html.Partial("_PartialFooter", footerModel)
</table>
<button type="submit">Save</button>
</div>
我应该在我的控制器中获得 20 条或者 25 条甚至 30 条记录:
public ActionResult ActionMethodName(List<MCS_DocumentFields> collection)
{
var test = collection;
List<MCS_Documents> model = DocumentService.All().ToList();
return View("Index", model);
}
但真正发生的是我只从第一个部分视图中获取数据。大多数时候,我得到的正是 10 条记录。我试图更改部分视图的呈现顺序,并且我总是从第一个部分视图中获取全部数据,最多 10 条记录,具体取决于第二条记录。我认为这个数字 10 有什么问题,所以我做了一个测试,渲染了一个包含 30 条记录的局部视图,当我第一次渲染它时,我得到了 30 条记录。所以它不限于 10 条,但是如果说我的第一部分有 2 条记录,而我的第二部分有 12 条记录,我会以任何方式取回 10 条记录,我只能从 2 条记录中获得 1 条记录,从 12 条记录中获得 10 条记录. 除了这个数字 10,所有这一切似乎都非常随机。
这是我的两个部分,只是为了看看我是如何处理它们的:
@model List<DataAccess.MCS_DocumentFields>
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td colspan="4" align="center">
<img src= "@Url.Content("~/Content/" + Model[i].FieldValue)" alt="Logo" />
@Html.HiddenFor(d => d[i].FieldValue)
@Html.HiddenFor(d => d[i].QuestionText)
@Html.HiddenFor(d => d[i].Id)
</td>
</tr>
}
而这个有更多的逻辑:
@model List<DataAccess.MCS_DocumentFields>
@{
int headerCol = 0;
}
@for (int i = 0; i < Model.Count; i++)
{
if (headerCol == 0)
{
@:<tr>
}
if (Model[i].MCS_Fields.FieldTypeId == 98)
{
<td colspan="2">
@*<img src= "@Url.Content("~/Content/" + Model[i].FieldValue)" alt="Logo" />*@
@Html.DisplayFor(y => y[i].FieldValue)
@Html.HiddenFor(y => y[i].FieldValue)
@Html.HiddenFor(y => y[i].Id)
</td>
++headerCol;
}
else if (string.IsNullOrEmpty(Model[i].FieldValue) && Model[i].MCS_Fields.FieldTypeId != 98)
{
<td colspan="2">
@Html.DisplayFor(y => y[i].QuestionText)
@Html.HiddenFor(y => y[i].QuestionText)
@Html.HiddenFor(y => y[i].FieldValue)
@Html.HiddenFor(y => y[i].Id)
</td>
++headerCol;
}
else
{
<td colspan="2">
@Html.DisplayFor(y => y[i].QuestionText)
@Html.HiddenFor(y => y[i].QuestionText)
:
@Html.DisplayFor(y => y[i].FieldValue)
@Html.HiddenFor(y => y[i].FieldValue)
@Html.HiddenFor(y => y[i].Id)
</td>
++headerCol;
}
if (headerCol == 2)
{
headerCol = 0;
@:</tr>
}
}
关于这种奇怪行为的任何想法以及如何解决它?