将复杂对象从View传递给Controller

时间:2013-09-24 14:17:38

标签: asp.net-mvc asp.net-mvc-4

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

  1. string actionName
  2. string controllerName
  3. 对象 routeValues
  4. FormMethod方法
  5. 我把我的模型放在第三个参数中,这个模型是先前从控制器传递给视图的复杂对象。但是,我收到编译错误:

      

    CS1928:'System.Web.Mvc.HtmlHelper'   不包含'BeginForm'的定义和最佳扩展名   方法重载'System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,   string,string,object,System.Web.Mvc.FormMethod)'有一些无效   参数

    有没有办法将复杂对象从视图发布到控制器?


    Edits

    我的模特是:

    public xxxModel
    {
       public string Name { get; set; }
       public Adddress Address { get; set; }
    }
    

    我的观点是:

    @model namespace.xxxModel
    ...
    @using (Html.BeginForm("actionName", "controller", Model, FormMethod.Post) { .....
    

2 个答案:

答案 0 :(得分:5)

您不能将您的Model类放在RouteValues参数内。

查看MSDN help
如帮助中所述:

routeValues
   键入:System.Object
   包含路径参数的对象。通过检查对象的属性,通过反射检索参数。此对象通常使用对象初始值设定项语法 创建

然后使用

new { MyProp1 = Model.Prop1, MyProp2 = Model.Prop2, MyProp3 = Model.Prop3, ... }

否则使用表单中的隐藏字段。 ModelBinder会在帖子中将它们映射到您的模型

答案 1 :(得分:0)

假设您要让用户填写要提交的表单,您可以将视图更改为:

@using(Html.BeginForm("actionName", "Controller", FormMethod.Post)
{
    @Html.TextBoxFor(m => m.Name)
    @Html.TextBoxFor(m => m.Address)
}

您的操作会接受模型作为参数。

**注意:如果表单位于要发布到的操作的视图中,您可以执行以下操作:

@using(Html.BeginForm())
{
    ...
}