C# Can';t让模型绑定在MVC2中工作
文本框的语法C# Can';t让模型绑定在MVC2中工作,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,文本框的语法 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(User UserToCreate) { //Controller action } model.UserName,新的{id=“UserName”,size=“30”})%> 创建时调用正常,但用户对象给出null为什么?帮助程序的TextBoxForhelper方法为输入框分配一个唯一的id,以便MVC可以在您将其发布到服务器时映射属性。如果您覆盖i
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(User UserToCreate)
{
//Controller action
}
model.UserName,新的{id=“UserName”,size=“30”})%>
创建时调用正常,但用户对象给出null为什么?帮助程序的
TextBoxFor
helper方法为输入框分配一个唯一的id,以便MVC可以在您将其发布到服务器时映射属性。如果您覆盖id,则映射将失败,请将文本框代码更改为:
<%: Html.TextBoxFor(model => model.UserName, new {id="UserName", size="30" })%>
model.UserName,新的{size=30})%>
只是澄清一下,MVC使用输入字段的name
属性映射属性。但是,我怀疑重写id
属性会影响这一点。您可以检查HTML输出以澄清这一点,名称应该类似于user.username
编辑
将代码沙盒到一个小型MVC3项目中,它对我来说运行良好(即使设置了id!)。查看您使用的标签,它会显示您使用的是MVC2而不是3?帮助程序的
TextBoxFor
方法为输入框分配一个唯一的id,以便MVC可以在您将其发布到服务器时映射属性。如果您覆盖id,则映射将失败,请将文本框代码更改为:
<%: Html.TextBoxFor(model => model.UserName, new {id="UserName", size="30" })%>
model.UserName,新的{size=30})%>
只是澄清一下,MVC使用输入字段的name
属性映射属性。但是,我怀疑重写id
属性会影响这一点。您可以检查HTML输出以澄清这一点,名称应该类似于user.username
编辑
将代码沙盒到一个小型MVC3项目中,它对我来说运行良好(即使设置了id!)。查看您使用的标签,它会显示您使用MVC2而不是3?可能是暗中操作,但请删除id=“UserName”部分 如果您的控制器已映射到特定类。像这样的东西应该可以
<% Html.TextBoxFor(model => model.UserName, new { size = 30 }) %>
可能是暗箭伤人,但请删除id=“UserName”部分 如果您的控制器已映射到特定类。像这样的东西应该可以
<% Html.TextBoxFor(model => model.UserName, new { size = 30 }) %>
您不需要分配id属性。确保视图是强类型的(按用户) 比如:
您不需要分配id属性。确保视图是强类型的(按用户) 比如:
User是一个类,UserToCreate是一个objecti表示属性…我提到了一个属性UserNameUser是一个类,UserToCreate是一个objecti表示属性…我提到了一个属性UserNamemodel绑定应该基于表单元素的“name”,而不是id。。。否?@ek_ny是的,但是,我很确定默认情况下,名称设置为id设置的任何名称(我可能错了)。我更新了我的问题来澄清。我刚刚创建了一个小沙盒应用程序,即使在原始代码中设置了ID,它也能正常工作!无论哪种方式,都不需要包括设置字段的
id
属性。我还注意到你的语法看起来像是MVC2而不是3?我已经更新了你的问题,问题是你把这个标记为MVC3,每个人都根据这个回答了。因此,您可能不理解其中一些答案(因为它们引用了MVC3中引入的razor
语法)。。。否?@ek_ny是的,但是,我很确定默认情况下,名称设置为id设置的任何名称(我可能错了)。我更新了我的问题来澄清。我刚刚创建了一个小沙盒应用程序,即使在原始代码中设置了ID,它也能正常工作!无论哪种方式,都不需要包括设置字段的id
属性。我还注意到你的语法看起来像是MVC2而不是3?我已经更新了你的问题,问题是你把这个标记为MVC3,每个人都根据这个回答了。因此,为什么您可能不理解其中的一些答案(因为它们引用了MVC3中引入的razor
语法)。对于这个问题,很抱歉,您可以用示例告诉我在哪里必须这样做吗?在您的视图顶部,在其他情况下,当您编写时:(model=>model.UserName)MVC不知道模型是用户,也不将发送数据与您的操作绑定在一起。Look:ActionResult Create(User UserToCreate)-您的操作需要用户,如果没有强类型视图,您将发送NoOneKnowsWhat@KamilBędkowski查看对我答案的评论以及更新的问题。OP使用的是MVC2而不是MVC3。对于这个问题,很抱歉,您可以用示例告诉我在哪里必须这样做吗?在您的视图顶部,在其他情况下,当您编写时:(model=>model.UserName)MVC不知道该模型是用户,并且不将发送数据与您的操作绑定。Look:ActionResult Create(User UserToCreate)-您的操作需要用户,如果没有强类型视图,您将发送NoOneKnowsWhat@KamilBędkowski查看对我答案的评论以及更新的问题。OP使用的是MVC2而不是MVC3。
@model User