确定从强类型视图接收数据的操作方法参数的类型
本文关键字:数据 操作方法 参数 类型 强类型 视图 | 更新日期: 2023-09-27 18:13:52
我有以下问题-我正在开发一个ASP。. NET MVC 3应用程序,我有视图,这是强类型。由于数据的复杂性,视图中的模型看起来像这样:
@model List<List<DataAccess.MCS_DocumentFields>[]>
然后我像这样渲染视图:
@using (Html.BeginForm("ActionMethodName", "Forms"))
{
<table border="1">
<tbody>
@for (int i = 0; i < Model.Count(); i++)
{
if (Model[i][0][0].ContentTypeId == 1)
{
@Html.Partial("_PartialHeader", Model[i])
}
else if (Model[i][0][0].ContentTypeId == 2)
{
@Html.Partial("_PartialDrawing", Model[i])
}
else if (Model[i][0][0].ContentTypeId == 3)
{
@Html.Partial("_PartialBody", Model[i])
}
else if (Model[i][0][0].ContentTypeId == 4)
{
@Html.Partial("_PartialFooter", Model[i])
}
}
</tbody>
</table>
<button type="submit">Save</button>
}
这是我的部分观点之一:
if (string.IsNullOrEmpty(item.FieldValue))
{
<td colspan="2">
@Html.DisplayFor(y => y[i][0].QuestionText)
@Html.HiddenFor(y => y[i][0].QuestionText)
</td>
}
else
{
<td colspan="2">
@Html.DisplayFor(y => y[i][0].QuestionText)
@Html.HiddenFor(y => y[i][0].QuestionText)
:
@Html.DisplayFor(y => y[i][0].FieldValue)
@Html.HiddenFor(y => y[i][0].FieldValue)
</td>
}
这只是一个片段,我想说的是,我的表至少有8-9行,几乎每一行都有@Html.HiddenFor
,所以我希望在提交表单时获得数据。
在我的控制器中,我有这个方法:
[HttpPost]
public ActionResult ActionMethodName(List<MCS_DocumentFields>[] collection)
{
var test = collection;
List<MCS_Documents> model = DocumentService.All().ToList();
return View("Index", model);
}
我尝试了很多不同类型的collection
参数。大多数情况下,我得到的是空,最多只能得到前两行(不知道为什么是前两行),仅此而已。如果我使用FormCollection
,那么我有所有提交的数据,但它与我的MCS_DocumentFields
类没有任何关系。
我不知道我做错了什么。我不认为该方法的类型应该被猜测,我认为它必须由某些东西确定,如果在代码中有一些问题(很可能在部分视图中),因为我在这里张贴了几乎所有我的主视图,那么任何建议为什么我的逻辑不起作用,为什么我不能将数据绑定到模型的原始类型?
我建议你看看BeginCollectionItem包(http://nuget.org/packages/BeginCollectionItem/),尽管我可以看到你的模型非常复杂(3维),所以你必须以一种非常讨厌的方式嵌套它们。
您还应该考虑(由于您的模型复杂性)创建一个自定义模型绑定器(http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder)。
最后一点——视图中的模型与实际操作中的模型不同:
伊万List
[] collection != List
[]>