无法使模型绑定在MVC2中工作

时间:2012-07-03 12:42:31

标签: c# asp.net-mvc-2

<% using (Html.BeginForm("Create", "User", FormMethod.Post, new { id = "frmCreateUser", name = "frmCreateUser" })){%>

我正在尝试将表单数据发送到控制器,其中Create是方法名称,user是方法是控制器名称。 方法的语法

 [AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Create(User UserToCreate)
 {
  //Controller action
 }

文本框的语法

  <%: Html.TextBoxFor(model => model.UserName, new {id="UserName", size="30" })%>

调用在Create上运行正常,但User对象为null?

3 个答案:

答案 0 :(得分:2)

TextBoxFor帮助器方法为输入框分配唯一的id,因此MVC可以在将属性发布到服务器时映射属性。您覆盖了ID,因此您的映射将失败,请将文本框代码更改为:

<% Html.TextBoxFor(model => model.UserName, new { size = 30 }) %>

为了澄清,MVC使用输入字段的name属性映射属性。但是,我怀疑覆盖id属性会影响这一点。您可以检查HTML输出以澄清这一点,名称应该类似于user.username

修改

将您的代码沙盒化为一个小型MVC3项目,它对我来说很好(即使设置了ID!)。看看你使用它的标签会出现你使用MVC2而不是3?

答案 1 :(得分:1)

您无需指定id属性。确保您的视图是强类型的(由用户) 像:

@model User

答案 2 :(得分:0)

可能是在黑暗中刺伤,但删除id =“UserName”部分。

如果您的控制器已映射到特定类。这样的事应该没问题。

@model  SomeSite.ViewModels.VM_User    

@Html.TextBoxFor(model => model.UserName, new { Class = "ui-corner-all FormElement ui-widget-content" })