2

我有以下问题 - 我正在开发一个 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班级没有任何关系。

我不知道我做错了什么。我不认为该方法的类型应该被猜测我认为它必须由某些东西决定,如果代码中存在一些问题(很可能在部分视图中),因为我在这里发布了几乎所有我的主要视图,那么有什么建议为什么我的逻辑不起作用以及为什么我不能将数据绑定到模型的原始类型?

4

1 回答 1

1

我建议您查看 BeginCollectionItem 包(http://nuget.org/packages/BeginCollectionItem/),尽管我可以看到您的模型非常复杂(3 维),所以您必须将它们嵌套在一个非常讨厌的方式。

您还应该考虑(由于您的模型复杂性)创建自定义模型绑定器(http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder)。

最后一点 - 您在 View 中的模型与您期望的实际模型不同:

列表<MCS_DocumentFields>[] 集合!= 列表<List<DataAccess.MCS_DocumentFields>[]>

伊万

于 2013-07-10T06:58:14.380 回答