将复杂对象从View传递到Controller

Old*_*zer 2 asp.net-mvc asp.net-mvc-4

我正在使用BeginForm()的重载10,其中参数为:

  1. 字符串actionName
  2. 字符串controllerName
  3. 对象 routeValues
  4. FormMethod方法

我将模型(这是一个较早的从控制器传递到视图的复杂对象)放在第三个参数中。但是,出现编译错误:

CS1928:“ System.Web.Mvc.HtmlHelper”不包含“ BeginForm”的定义,最佳扩展方法重载“ System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,字符串,字符串,对象,System.Web.Mvc.FormMethod)'包含一些无效的参数

有没有一种方法可以将复杂的对象从视图发布到控制器?


Edits

我的模型是:

public xxxModel
{
   public string Name { get; set; }
   public Adddress Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的看法是:

@model namespace.xxxModel
...
@using (Html.BeginForm("actionName", "controller", Model, FormMethod.Post) { .....
Run Code Online (Sandbox Code Playgroud)

Iri*_*dio 5

您不能将Model类放入RouteValues参数中。

查看MSDN帮助
如帮助中所述:

routeValues
类型:System.Object
包含路由参数的对象。通过检查对象的属性,通过反射来获取参数。通常使用对象初始化程序语法创建此对象。

然后用这个

new { MyProp1 = Model.Prop1, MyProp2 = Model.Prop2, MyProp3 = Model.Prop3, ... }
Run Code Online (Sandbox Code Playgroud)

否则,请在表单内使用隐藏字段。在发布过程中,ModelBinder会将它们映射到您的模型