TextBoxFor для типа Nullable
Как я могу пользователь TextBoxFor
для обнуляемого типа, в моем случае DateTime?
<%:Html.TextBoxFor(m => m.LeaseDate.Value.ToShortDateString(), new { @class = "def-text-input datetime-input" })%>
Я пытаюсь это, но получаю ошибку:
Сведения об исключении: System.InvalidOperationException: Шаблоны могут использоваться только с доступом к полям, доступом к свойствам, индексом одноразмерного массива или выражениями настраиваемого индексатора с одним параметром.
4 ответа
Вы можете использовать Html.EditorFor
<%:Html.EditorFor(m => m.LeaseDate, "Date")%>
Обратите внимание на параметр "Дата". Это ссылка на EditorTemplate (пользовательский элемент управления, обычно расположенный в папке "Views/Shared/EditorTemplate"). Если нет, создайте пользовательский контроль / файл самостоятельно "Date.ascx"
Теперь метод EditorFor будет использовать этот элемент управления в качестве шаблона. Единое место для контроля всех ваших полей даты, которые используют этот шаблон!
Пример пользовательского элемента управления "Date.ascx"
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
ViewDataDictionary attributes = ViewData;
attributes.Add("class", "def-text-input datetime-input");
%>
<%= Html.TextBox(string.Empty, string.Format("{0:d-M-yyyy}", Model), attributes) %>
Как уже упоминали другие ребята, вы можете сделать форматирование на модели
[DisplayFormat(DataFormatString = "{0:MM/dd/yy}", ApplyFormatInEditMode = true)]
public DateTime LeaseDate { get; set; }
а затем позвоните
@Html.TextBoxFor(x => x.LeaseDate)
на ваш взгляд
Но с другой стороны, если вы хотите придерживаться форматирования при просмотре, вы можете использовать
@Html.TextBox("LeaseDate", Model.LeaseDate.ToShortDateString())
Удачного кодирования
TextBoxFor
следует использовать для свойства в вашей ViewModel:
<%:Html.TextBoxFor(m => m.LeaseDate, new { @class = "def-text-input datetime-input" })%>
Если вы хотите отформатировать дату, вы можете использовать DataFormatString
собственность на DisplayFormat
Атрибут вашей ViewModel:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime LeaseDate { get; set; }
Модель:
[DisplayFormat(DataFormatString = "{0:MM/dd/yy}", ApplyFormatInEditMode= true]
DateTime? dateAssign { get; set; }
Посмотреть:
@Html.TextBoxFor(model => model.myObject.dateAssign)