2015-11-16 4 views
1

Ранее я задавал этот вопрос, пытаясь использовать datepicker для проверки даты в asp.net mvc 4.5.1. Теперь я удалил datepicker и просто пытаюсь подтвердить дату в формате mm/dd/yyyy, используя аннотации данных в модели и regex, чтобы форматировать формат. Вот мой код:Проверка даты MVC ASP.NET с использованием аннотаций и regex данных

Model: 
     [DisplayName("Start Date")] 
     [DataType(DataType.Date, ErrorMessage = "Date not valid.")] 
     [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] 
     [RegularExpression(@"^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$", ErrorMessage = "Date must be in format mm/dd/yyyy")] 
     public DateTime? DT_Project_Start { get; set; } 

Вид:

<div class="form-group"> 
     @Html.LabelFor(model => model.DT_Project_Start, new { @class = "control-label col-md-2 CreateEditFieldNamesSpan" }) 
<div class="col-md-10"> 
     @Html.TextBoxFor(model => model.DT_Project_Start) 
     @Html.ValidationMessageFor(model => model.DT_Project_Start) 
          </div> 
         </div> 

Не работает ... проверка не работает отлично, а в форме, но когда я нажимаю «Отправить», он говорит неверная дата не важно, что , даже если дата действительна и в правильном формате. Кто-нибудь знает, что мне не хватает?

+0

Потому что ваше свойство 'DateTime'. Удалить регулярное выражение (его бессмысленно). Вам нужно изменить метод '$ .validator' или использовать' jquery.globalize.js' См. [Этот ответ] (http://stackoverflow.com/questions/27285458/jquery-ui-datepicker-and-mvc-view- model-type-datetime/27286969 # 27286969), если вы используете jquery-ui datepicker –

+0

Спасибо за ответ. Если я удалю регулярное выражение, как заставить клиента ввести 4-значный год? На данный момент я не использую datepicker. Он не работал с IE. –

+0

Во-первых, '[DataType]' и '[DisplayFormat]' немного бессмысленны, если вы используете '@TextBoxFor()'. Во-вторых, вы должны подумать о том, чтобы задать вопрос о datepicker и IE, поскольку нет причин, по которым он не должен работать. –

ответ

1

Если вы хотите, чтобы заставить пользователя ввести дату 4 цифры, вы можете использовать следующую RegularExpressionAttribute вашей собственности

[RegularExpression(@".*\d{4}.*", ErrorMessage = "Please enter a 4 digit year")] 
public DateTime? DT_Project_Start { get; set; } 

Обратите внимание, что DateTime свойство включает в себя компонент времени, который почему ваш текущий регулярное выражение может потерпеть неудачу. Также обратите внимание, что вам не нужны атрибуты [DataType] и [DisplayFormat]. Это соблюдается только при использовании методов EditorFor() или DisplayFor(). С вашей помощью TextBoxFor(), вы можете отформатировать дату, используя

@Html.TextBoxFor(m => m.DT_Project_Start, "{0:MM/dd/yyyy}") 

лишить компонент времени на дисплее.

+0

Это работает очень хорошо, поэтому да, спасибо большое за время и ответы, которые вы дали. Мои голоса, кажется, еще не подсчитаны, но как только я получу достаточно высокую репутацию, я вернусь и проголосую за это! Вы были бы очень полезны! –

+0

Вы должны по крайней мере отметить его как принятое (отметьте галочкой слева) –

+0

Считаете ли вы, что я могу добавить к этому функцию generic datepicker без подтверждения для удобства ввода даты? –

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