MVC viewmodel数组未被填充

时间:2013-04-17 19:09:25

标签: asp.net-mvc viewmodel

我有一个采用viewmodel的动作。

[HttpPost]
public JsonResult SearchAjax(JQueryDataTablesModel jQueryDataTablesModel, BloodSearchAjaxViewModel searchModel)
{
...

在该视图模型中有一个数组

public ReadOnlyCollection<string> mDataProp_ { get; set; }

当我调用动作时,我通过fiddler验证是否正在传递数组数据

enter image description here

但是,数组(以及viewmodel中的其他数组)为null。

另外,如果我在viewmodel中放入一个名为mDataProp_0的字段,它就会被填充。

根据评论更新。以下是发布数据的视图中的代码。我正在使用jQueryDataTable。我不认为这个代码很重要,因为我验证了数据是在http请求中。

/* Initialize table */
        var oTable = $('#search-results-table').dataTableWithFilter({
                "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
                "sPaginationType": "bootstrap",
                "bProcessing": true,
                "bServerSide": true,
                "sAjaxSource": 'SearchAjax',
                "sServerMethod": "POST",
                "aoColumns": [
                    { "mDataProp": "BloodIdentificationNumber" },
                    { "mDataProp": "Status" },
                    { "mDataProp": "ExpirationDate" },
                    { "mDataProp": "CompanyName" },
                    { "mDataProp": "Location" },
                    { "mDataProp": "City" }
                ],
                // Initialize our custom filtering buttons and the container that the inputs live in
                filterOptions: { searchButton: "search-button", clearSearchButton: "clear-search-button", searchContainer: "search-block" }
        });

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

默认的模型绑定器非常挑剔。我认为你在这里看到的只是数据不符合粘合剂所期望的约定。您可以选择1)按下默认活页夹接受的数据或2)编写自定义模型活页夹。以下是两种方法的一些链接。

ASP.NET MVC - Custom model binder able to process arrays http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

答案 1 :(得分:0)

我找到了解决方案。研究项目我发现你必须在Global.asax文件中包含一行。

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        // This line
        ModelBinders.Binders.Add(typeof(JQueryDataTablesModel), new JQueryDataTablesModelBinder());
    }

如果JQueryDataTablesModel用作参数,下面的行应包含在Global.asax中,问题就解决了。