确定从强类型视图接收数据的操作方法参数的类型

本文关键字:数据 操作方法 参数 类型 强类型 视图 | 更新日期: 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[]>

伊万