Asp.net mvc Post进入控制器无法正常工作
我有一个嵌套类的实体模型。FSRHire是父母,员工是子女:Asp.net mvc Post进入控制器无法正常工作,asp.net-mvc,asp.net-mvc-4,model-binding,Asp.net Mvc,Asp.net Mvc 4,Model Binding,我有一个嵌套类的实体模型。FSRHire是父母,员工是子女: class FSRHire { ... public virtual Employee Employee ... } class Employee { ... public string LastName {get;set;} public DateTime DOB {get;set;} ... } 视图: @LabelFor(model=>model.Employee.La
class FSRHire {
...
public virtual Employee Employee
...
}
class Employee {
...
public string LastName {get;set;}
public DateTime DOB {get;set;}
...
}
视图:
@LabelFor(model=>model.Employee.LastName)
@EditorFor(model=>model.Employee.LastName)
@Html.ValidationMessageFor(model=>model.Employee.LastName)
@LabelFor(model=>model.Employee.DOB)
@TextBox(Html.IdFor(model=>model.Employee.DOB).ToString(),model.Employee.DOB.HasValue?model.Employee.DOB.Value.ToString(“d”):“”,new{@class=“date”})
@Html.ValidationMessageFor(model=>model.Employee.DOB)
控制器中的post无效。以下是请求中的数据:
…Employee.LastName=Worker&Employee\u DOB=01%2F01%2F1970&
模型活页夹很好地记住了这个名字。Employee.DOB为空
这可能是由DOB字段中的下划线引起的。(雇员)。我想知道为什么会这样,以及我如何修复它。它应该是以下格式:
...Employee.LastName=Worker&Employee.DOB=01%2F01%2F1970& ...
更改自:
Employee_DOB=01%2F01%2F1970&
// ^
到
关于这一观点:
@Html.TextBox(Html.IdFor(model => model.Employee.DOB).ToString(), Model.Employee.DOB.HasValue ? Model.Employee.DOB.Value.ToString("d") : "", new { @class = "date" })
在Web.mvcdll中没有IdFor
方法,可能是您自己编写的,或者使用了一些库,总之它工作不正常
将视图中的线更改为如下所示:
@Html.TextBoxFor(model => model.Employee.DOB, Model.Employee.DOB.HasValue ? Model.Employee.DOB.Value.ToString("d") : "", new { @class = "date" })
它位于MVC4.0中的System.Web.Mvc.Html中。这是可以肯定的。我正在研究这项技术的来源。我为它添加了标签。无论如何,如果您没有更改HTML助手生成标记的方式,我建议您为MVC团队打开一个bug。您应该知道ASP.Net-MVC4仍处于测试阶段…:(我实际上更改了标记以使用jQueryUIDatePicker。(基于不正确的博客条目。)我将视图中必须更改的行添加到您的答案中。
@Html.TextBox(Html.IdFor(model => model.Employee.DOB).ToString(), Model.Employee.DOB.HasValue ? Model.Employee.DOB.Value.ToString("d") : "", new { @class = "date" })
@Html.TextBoxFor(model => model.Employee.DOB, Model.Employee.DOB.HasValue ? Model.Employee.DOB.Value.ToString("d") : "", new { @class = "date" })