我使用的是超载10 BeginForm()
其中的参数是。
我把我的模型,也就是之前从控制器传递给视图的一个复杂对象,放在第三个参数中。 但是,我得到一个编译错误。
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) { .....
你不能把你的Model类放在RouteValues params里面。
请看 MSDN帮助 如帮助中所述。
路由值类型: System.Object 包含路由参数的对象。通过检查对象的属性,通过反射检索参数。这个对象通常是 通过使用对象初始化器语法创建.
那就用这个
new { MyProp1 = Model.Prop1, MyProp2 = Model.Prop2, MyProp3 = Model.Prop3, ... }
否则就在您的表单中使用隐藏字段。ModelBinder会在后期将它们映射到您的模型中。
假设你是让用户填写一个要提交的表单,你可以将你的视图改为。
@using(Html.BeginForm("actionName", "Controller", FormMethod.Post)
{
@Html.TextBoxFor(m => m.Name)
@Html.TextBoxFor(m => m.Address)
}
你的动作将接受模型作为参数。
** 注意:如果表单在被发布到的动作的视图中,你可以这样做。
@using(Html.BeginForm())
{
...
}