2016-12-24 3 views
7

Я хочу создать простую форму ASP.Net, которая получит даты рождения. У меня есть модель с этим свойством:Публикация действительных DateTimes из любого места

[DataType(DataType.Date)] 
public DateTime? BirthDate{ get; set; } 

и на мой взгляд (это с помощью DatePicker):

@Html.LabelFor(model => model.BirthDate) 
@Html.TextBoxFor(model => model.BirthDate, new { @class = "form-control date-picker" }) 
@Html.ValidationMessageFor(model => model.BirthDate, "", new { @class = "text-danger" }) 

Заходящее на моем яваскрипта DatePicker только один является:

format: 'L' 

, потому что я хочу показать даты не раз.

Теперь я не могу спасти, из-за ошибки проверки:

The value '12/23/2000' is not valid for BirthDate.

Теперь я знаю, его ошибка глобализации ... Мне нужно установить культуру <globalization> элемента в web.config, и т.д. ... Но, вы заметили, что я не устанавливал форматы (кроме формата datepicker «L»)? Я хочу, чтобы эта форма получила дату рождения от людей в любой стране, не имела конкретной культуры/формата и т. Д.

Возможно ли это? Как мне это сделать?

Edit:

  • , которые выбора даты ты пользуешься?
    JQuery один, но это не запрос, я могу перейти на любой datepicker, который может легко обрабатывать различные форматы сохранения «yyyy-mm-dd» и формат отображения.
  • Какая локали ваш сервер находится и какой формат вы предпочитаете работать в своем коде MVC и сохраняться в базе данных?
    Я не знаю, где мой клиент будет размещать сайт, его AWS ... Я предпочитаю работать с en-us.
+2

Затем используйте формат 'yyyy-MM-dd'. это применимо во всем мире и не может иметь какой-либо двусмысленности – Nkosi

+1

, какой выбор даты вы используете? это не похоже на JQueryUi? – Prasoon

+1

В каком языковом каталоге находится ваш сервер и какой формат вы предпочитаете работать в коде MVC и сохраняетесь в базе данных? Возможно, это [плагин глобализации jQuery из блога ScottGu] (https://weblogs.asp.net/scottgu/jquery-globalization-plugin-from-microsoft) может вам помочь. –

ответ

9

Предполагая, что ваш датпикер может вернуть выбранную дату в объект Date() js. Я бы предложил преобразовать значение даты в стандартный формат, такой как ISO8601. Таким образом, вам нужно прикрепить событие onChange в свой выбор даты и преобразовать выбранное значение Date() в формат ISO8601. Вы можете присвоить это преобразованное значение скрытому полю (просто date.toISOString()).

Анализатор MVC .net также понимает формат ISO8601, поэтому, когда данные формы размещаются на сервере, он анализируется, чтобы исправить значение даты. См. Также this question.

Я создал jsfiddle, используя jquery UI datepicker. Он использует altFormat и altField, которые могут использоваться для внутреннего формата даты независимо от того, какой формат даты отображается пользователю в поле ввода фактической даты.

Найти jsfiddle здесь - https://jsfiddle.net/Prasoon1983/kyjvwkLd/2/

$("#dob").datepicker({ 
 
altFormat: "yy-mm-dd", 
 
altfield:"#dobInternal" 
 
}); 
 
$("#dob").datepicker("option", "altField", "#dobInternal");
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 
<input type="text" id="dob" /> 
 
<input type="text" id="dobInternal" />

Я использовал элемент управления ввода для отображения цели, но вы можете использовать скрытый вход.

Надеюсь, это поможет.

1

Сделайте свою недвижимость ниже

[RegularExpression(@"(\d{2}|\d{1})[/](\d{2}|\d{1})[/]\d{4}",ErrorMessage ="Birthday field must be ad dd/mm/yyyy format.")] 
public DateTime? BirthDate{ get; set; } 

Выше регулярное выражение только для дд/мм/гггг format.If вам нужно альтернативы следует добавить, что знак в [/].

Тип BirthDate имущества ViewModel может быть строка now.You может преобразовать его в DateTime, когда вам нужно

1

Глобализация действительно трудно. Но если вы передаете Javascrip, вы можете отобразить выбранную дату в одном формате и отправить ее на сервер с использованием другого, например. Стандарт ISO.

На стороне сервера я бы подготовил строгий валидатор - например. принять только дату в формате ISO. Когда вы получаете запрос с каким-то странным вводом, ответьте с ошибкой (с соответствующим сообщением).

Смежные вопросы