Привязка модели даты и времени MVCC#

Место общения программистов C#
Ответить
Anonymous
 Привязка модели даты и времени MVC

Сообщение Anonymous »

Я использую в своем приложении два средства выбора дат кендо:

Код: Выделить всё


Start Date:

@(Html.Kendo().DatePickerFor(m=>m.StartDate))

End Date:

@(Html.Kendo().DatePickerFor(m=>m.EndDate))

Show


При нажатии кнопки я считываю значения этих средств выбора даты на стороне клиента и отправляю POST на контроллер API.

Проблема, с которой я сталкиваюсь, заключается в том, что параметры DateTime иногда анализируются неправильно, я использую культуру en-GB (указанную в моем web.config), однако с учетом даты 03.01.2014 (1 марта) , когда значение обрабатывается связывателем модели, оно интерпретируется как 01.03.2014 (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, но это не сработало, связующее никогда не вызывается. Я не уверен, связано ли это с тем, что дата и время являются свойством пользовательского объекта.

Код: Выделить всё

 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);
Кто-нибудь знает, где я ошибаюсь?

Подробнее здесь: https://stackoverflow.com/questions/224 ... el-binding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»