我changed the culture为Invariant,但仍然将其返回null值给控制器
在BeginForm中定义的datepicker,其他控件返回正确的值,期待DatePicker。
Html.BeginForm("MergeTeacherDetails","Profile", FormMethod.Post, new { id = "FormTeacherDetails" })))
DatePicker格式更改为('dd / mm / yyyy') 这里是查看代码
@Html.LabelFor(m => m.DOB, "DOB", new { @class = "control-label"})
<div class="controls">
@{System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
@Html.TextBoxFor(model => model.DOB, new { placeholder = "DOB",@readonly = "readonly",@class="ReadOnly" })}
</div>
这里是JavaScript
$('#DOB').datepicker({ startView: 2, autoclose: true, format: "dd/mm/yyyy", endDate: '@DateTime.Now.ToString("dd/MM/yyyy")', changeYear: true, changeMonth: true, weekStart: 1 });
这里是DAL代码
public Nullable<System.DateTime> DOB { get; set; }
这里是控制器代码
public ActionResult MergeTeacherDetails(Staffs objStaffs)
{
int res = _staffRepository.InsertOrUpdate(objStaffs);
if(res>0)
{
_mapStaffRepository.SaveMapStaff(objStaffs.StaffId);
}
return RedirectToAction("/MyProfile/1");
}
在控制器中,参数objStaffs.DOB返回为NULL
这个
请帮我解决这个问题
提前致谢
答案 0 :(得分:3)
您需要确保应用程序在使用模型绑定器将发布的值绑定到datetime值时使用预期的日期格式(将发布的值绑定到objStafss
模型时)
默认情况下,模型绑定器将使用当前的区域性格式,在您的计算机上可能为dd/mm/yyyy
,而测试/客户端计算机上的格式为mm/dd/yyyy
。
您可以创建模型绑定器,始终要求格式为dd/mm/yyyy
的日期(在.net中表示为dd / MM / yyyy):
public class CustomModelBinder : DefaultModelBinder
{
protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder)
{
var propertyType = propertyDescriptor.PropertyType;
if(propertyType == typeof(DateTime) || propertyType == typeof(DateTime?))
{
var providerValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (null != providerValue)
{
DateTime date;
if (DateTime.TryParseExact(providerValue.AttemptedValue, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
return date;
}
}
}
return base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder);
}
}
然后,您需要告诉MVC使用模型绑定器,例如,您可以通过替换默认绑定器,在global.asax Application_Start
事件中为您的应用程序全局连接:
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();