我有一个采用viewmodel的动作。
[HttpPost]
public JsonResult SearchAjax(JQueryDataTablesModel jQueryDataTablesModel, BloodSearchAjaxViewModel searchModel)
{
...
在该视图模型中有一个数组
public ReadOnlyCollection<string> mDataProp_ { get; set; }
当我调用动作时,我通过fiddler验证是否正在传递数组数据
但是,数组(以及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" }
});
有什么想法吗?谢谢!
答案 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中,问题就解决了。