我在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条记录。所有这些似乎都是随机的,不包括这个数字。
以下是我的两个部分内容,只是为了看看我是如何处理它们的:
@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>
}
}
关于这种奇怪行为的任何想法以及如何解决它?