2

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

  1. 字符串动作名称
  2. 字符串控制器名称
  3. 对象路由值
  4. FormMethod 方法

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

CS1928: 'System.Web.Mvc.HtmlHelper<MvcApplication5.Models.xxxModel>'does not 
contain a definition for 'BeginForm' and the best extension method overload 
'System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper, 
string, string, object, System.Web.Mvc.FormMethod)' has some invalid 
arguments

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


编辑:

我的模型是:

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

我的看法是:

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

2 回答 2

5

您不能将模型类放在 RouteValues 参数中。

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

routeValues
类型:System.Object
一个包含路由参数的对象。通过检查对象的属性通过反射检索参数。此对象通常是使用对象初始值设定项语法创建的

那就用这个

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

否则使用表单中的隐藏字段。ModelBinder 将在发布期间将它们映射到您的模型

于 2013-09-24T14:27:26.127 回答
0

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

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

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

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

@using(Html.BeginForm())
{
    ...
}
于 2013-09-24T14:42:04.697 回答