2011-05-16 50 views
0

我不明白为什么MVC3中的DefaultModelBinder没有将Form Post Data映射到我的操作方法。使用DisplayTemplates为什么MVC3中的DefaultModelBinder不绑定?

public class DisplayExcelTableViewModel 
{ 
    public string UploadedFileName { get; set; } 
    public List<string> TableHeaders { get; set; } 
    public List<TableRowViewModel> TableRows { get; set; } 
} 

public class TableRowViewModel 
{ 
    public List<string> TableColumns { get; set; } 
} 

它们显示在一个(部分)查看:

@using (Html.BeginForm("SubmitExcel", "Home", FormMethod.Post)) 
{ 
<fieldset> 

<table> 
<tr> 
<th>@Html.DisplayFor(m => m.TableHeaders)</th>//<input id="TableHeaders_0_" name="TableHeaders[0]" type="text" value="Opportunity Id" /> 
</tr> 

<tr> 
<td>@Html.DisplayFor(m => m.TableRows)</td>//<input id="TableRows_0__TableColumns_0_" name="TableRows[0].TableColumns[0]" type="text" value="1-H7PKD9" /> 
</tr> 

</table>   


<input type="submit" value="Send" /> 
</fieldset> 
} 

而且操作方法如下:

public ActionResult SubmitExcel(DisplayExcelTableViewModel excelTable) 
我有以下的ViewModels

试试它是否正常工作高电平单TableRows我想:

public ActionResult SubmitExcel([Bind(Prefix = "TableRows")] TableRowViewModel TableRows) 

测试我也试图把List<TableRows>,并采取了绑定属性。这是行不通的。 我得到一个运行时异常:

“System.MissingMethodException:没有为此对象定义的无参数构造函数。”

可以告诉我我做错了什么吗?

感谢弗朗西斯

回答

2

的问题是,我的ViewModels 没有参数构造函数,这是什么默认模型绑定查找(使用.NET的Activator.CreateInstance()方法,该方法依赖于具有公共这些类型在这种情况下的解决方案有两种:

1)向ViewModel和包装在其中的其他自定义类添加无参数构造函数。

2)创建还包括您的视图模型

感谢的情况下

来源自定义模型绑定:专业ASP.NET MVC2框架(第2版)

0

你检查(例如用萤火虫)是否表单数据被发送到服务器?我在问,因为Html.DisplayFor通常会呈现显示元素,而发布值通常必须使用Html.EditorFor

+0

thenaks的答案。我使用Fiddler 2并将数据正确发布到服务器 – CiccioMiami 2011-05-16 13:41:18

相关问题