将复杂的对象从视图传递到控制器

问题描述 投票:2回答:2

我使用的是超载10 BeginForm() 其中的参数是。

  1. string actionName
  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) { .....
asp.net-mvc asp.net-mvc-4
2个回答
5
投票

你不能把你的Model类放在RouteValues params里面。

请看 MSDN帮助 如帮助中所述。

路由值类型: System.Object 包含路由参数的对象。通过检查对象的属性,通过反射检索参数。这个对象通常是 通过使用对象初始化器语法创建.

那就用这个

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

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


0
投票

假设你是让用户填写一个要提交的表单,你可以将你的视图改为。

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

你的动作将接受模型作为参数。

** 注意:如果表单在被发布到的动作的视图中,你可以这样做。

@using(Html.BeginForm())
{
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.