将强类型数据从View传递到Controller

时间:2013-08-07 20:29:36

标签: c#-4.0 asp.net-mvc-4 razor-2

我有一个使用@model MyNamespace.Customer定义的字符串类型视图,其中包含使用Html.BeginForm( "NewCustomer", "CustomerReg", FormMethod.Post )帮助程序创建的表单。

我的CustomerRegController控制器上的NewCustomer操作类似于

[HttpPost]
public ViewResult NewCustomer( MyNamespace.Customer objCustomer )

我正在从页面上的模型绑定字段“填充”客户字段的一部分。

当我提交时,我会进入正确的行动,但是objCustomer是所有初始值。我虽然可以通过这种方式传递强类型数据;我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的视图强烈输入@model MyNamespace.Customer这一事实并不意味着在提交表单时,此模型会以某种方式自动发布到您的操作中。基本上,如果要将此属性传递给POST操作,则需要为要在表单中检索的每个属性提供输入字段。

还要确保此Customer对象是具有默认(无参数)构造函数的POCO,其中您要检索的每个属性都具有公共getter和setter。否则,默认模型绑定器将永远无法反序列化对此模型的请求。解决此问题的理想方法是使用视图模型,该模型是您专门设计的类,以满足视图的要求并停止将域模型传递给它。这个视图模型当然会为你想要检索的所有属性都有一个默认的构造函数和公共setter和getter。