Настраиваемая модель в контроллере ASP.NET MVC: настраиваемое сообщение для DateType типа Date - PullRequest
0 голосов
/ 04 мая 2010

У меня есть страница ASP.NET MVC, на которой я должен отображать поля в настроенном тексте. Для этого я создал CustomModel RequestViewModel со следующими полями.

Описание, Событие, UsageDate

В соответствии с этим моя пользовательская модель имеет следующий код. Таким образом, DisplayName отображается на странице ASP.NET MVC View.

Теперь, являясь типом данных Описание и Строка события, оба эти поля отображают Custom DisplayMessage. Но У меня проблема с датой Datatype . Вместо « Дата использования слайдов » он по-прежнему отображает UsageDate из фактической модели.

Кто-нибудь сталкивался с этой проблемой с DateDatatype?

Ценю ваши ответы.

Пользовательская модель:

[Required(ErrorMessage="Please provide a description")]
[DisplayName("Detail Description")]
[StringLength(250, ErrorMessage = "Description cannot exceed 250 chars")]
// also need min length 30
public string Description { get; set; }

[Required(ErrorMessage="Please specify the name or location")]
[DisplayName("Name/Location of the Event")]
[StringLength(250, ErrorMessage = "Name/Location cannot exceed 250 chars")]
public string Event { get; set; }

[Required(ErrorMessage="Please specify a date", ErrorMessageResourceType = typeof(DateTime))]
[DisplayName("Date of Use of Slides")]
[DataType(DataType.Date)]
public string UsageDate { get; set; }

ViewCode:

<p>
    <%= Html.LabelFor(model => model.Description) %>
    <%= Html.TextBoxFor(model => model.Description) %>
    <%= Html.ValidationMessageFor(model => model.Description) %>
</p>
<p>
    <%= Html.LabelFor(model => model.Event) %>
    <%= Html.TextBoxFor(model => model.Event) %>
    <%= Html.ValidationMessageFor(model => model.Event) %>
</p>
<p>
    <%= Html.LabelFor(model => model.UsageDate) %>
    <%= Html.TextBoxFor(model => model.UsageDate) %>
    <%= Html.ValidationMessageFor(model => model.UsageDate) %>
</p>

Ответы [ 2 ]

1 голос
/ 04 мая 2010

У вас неверное определение атрибута для [Required(ErrorMessage="Please specify a date", ErrorMessageResourceType = typeof(DateTime))]. Я подозреваю, что это вызывает проблему.

Свойство ErrorMessageResourceType используется вместе со свойством ErrorMessageResourceName . Вы можете проверить эту ссылку для получения дополнительной информации о том, как правильно их использовать (не имеет прямого отношения к вашей проблеме).

Измените код на это, и у вас все будет готово:

[Required(ErrorMessage="Please specify a date")]
[DisplayName("Date of Use of Slides")]
[DataType(DataType.Date)]
public string UsageDate { get; set; }

Не совсем уверен, но вы также можете сбросить [DataType(DataType.Date)], поскольку вы уже переформатировали значение даты в строку при заполнении модели (я полагаю?).


Просто предложение, но вы, возможно, захотите рассмотреть вместо преобразования DateTime в строку, вместо этого используйте DisplayFormatAttribute , а затем измените свойство UsageDate, чтобы оно выглядело примерно так:

[Required(ErrorMessage="Please specify a date")]
[DisplayName("Date of Use of Slides")]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime UsageDate { get; set; }

Где значение DisplayFormatAttribute.DataFormatString соответствует желаемому выходному форматированию DateTime. См. на этой странице для получения полного списка шаблонов форматирования.

С указанным выше определением свойства вы можете затем вызвать <%=Html.DisplayFor(m => m.UsageDate)%> в вашем представлении, и оно будет отображать дату в формате, который вы указали в атрибуте. Гораздо чище и гораздо более расширяемо, чем преобразование DateTime в строку перед отправкой в ​​View - но, конечно, это полностью ваше дело. :)

Счастливых путешествий!

1 голос
/ 04 мая 2010

Каковы ваши намерения с ErrorMessageResourceType = typeof(DateTime)? Я не верю, что вы должны установить это без использования ErrorMessageResourceName. Вы пытались удалить его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...