我正在使用BeginForm()的重载10,其中的参数是:
我把我的模型放在第三个参数中,这个模型是先前从控制器传递给视图的复杂对象。但是,我收到编译错误:
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) { .....
答案 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())
{
...
}