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)
Другие вопросы по тегам