<% 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?
答案 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" })