MVC日期时间模型绑定
我在我的应用程序中使用2个kendo日期选择器:
Start Date: @(Html.Kendo().DatePickerFor(m=>m.StartDate)) End Date: @(Html.Kendo().DatePickerFor(m=>m.EndDate))
单击该按钮时,我会读取这些日期选择器客户端的值,并对API控制器进行POST。
我遇到的问题有时是DateTime参数被错误地解析,我使用的是en-GB文化(在我的web.config中指定),但是给定日期为2014年3月1日(3月1日),当值为由模型绑定器处理,它被解释为03/01/2014(1月3日)。
我的javascript如下:
function getGraphData() { var startDatePicker = $("#StartDate").data("kendoDatePicker"); var endDatePicker = $("#EndDate").data("kendoDatePicker"); var param = { StartDate: kendo.toString(startDatePicker.value().toLocaleDateString(), "dd/MM/yyyy"), EndDate: kendo.toString(endDatePicker.value().toLocaleDateString(), "dd/MM/yyyy") }; // Do post here }
我的模型如下:
public class DateRangeParam { #region Constructors and Destructors /// /// Initializes a new instance of the class. /// public DateRangeParam() { this.EndDate = DateTime.Today.AddDays(1).AddSeconds(-1); this.StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); } #endregion #region Public Properties /// /// Gets or sets the end date. /// public DateTime EndDate { get; set; } /// /// Gets or sets the start date. /// public DateTime StartDate { get; set; } #endregion }
我认为解决方案是我需要一个自定义模型绑定器来解析日期时间值,所以我创建了(如下所示)并将其注册在Global.asax.cs文件中,但这没有用,绑定从不调用,我我不确定这是因为datetime是自定义对象的属性。
public class DateTimeModelBinder : IModelBinder { #region Fields private readonly string _customFormat; #endregion #region Constructors and Destructors public DateTimeModelBinder(string customFormat) { this._customFormat = customFormat; } #endregion #region Explicit Interface Methods object IModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); return DateTime.ParseExact(value.AttemptedValue, this._customFormat, CultureInfo.InvariantCulture); } #endregion }
它注册如下:
var binder = new DateTimeModelBinder(new CultureInfo("en-GB").DateTimeFormat.ShortDatePattern); ModelBinders.Binders.Add(typeof(DateTime), binder); ModelBinders.Binders.Add(typeof(DateTime?), binder);
有谁知道我哪里出错了?
我没看到的是你在global.asax中注册DateTimeModelBinder的地方:
ModelBinders.Binders[typeof(DateTime)] = new DateAndTimeModelBinder() { CustomFormat = "yyyy-mm-dd" };
Scott Hanselman使用DateTime Custom Model Binders这个非常相似的post
上述就是C#学习教程:MVC日期时间模型绑定分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015083.html