Ввод с установленным форматом даты из ViewModel и атрибута класса html - PullRequest
5 голосов
/ 11 ноября 2011

Я работаю с механизмом просмотра бритвы в asp.net mvc3.

Теперь мне нужен вход для DateTime, который должен отображать значение в фиксированном формате (скажем, dd-MMM-yyyy).Так что я могу сделать:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime StartDate { get; set; }

И в представлении:

@Html.EditorFor(model => model.StartDate)

Но мне нужно добавить класс во входных данных.Что, я думаю, невозможно в EditorFor.Поэтому я мог бы использовать

@Html.TextBoxFor(model => model.StartDate, new { @class = "Date" })

Но формат отображения в этом случае не работает.

Model может быть нулевым.Итак,

@Html.TextBox("StartDate", string.Format("{0:dd-MMM-yyyy}", Model.StartDate))

скинет NullReferenceException.

Ответы [ 2 ]

9 голосов
/ 11 ноября 2011

путь Офелии - моя более быстрая версия. Но этот способ полезен, если в вашем приложении будет несколько полей даты. Вот как мне нравится это делать:

-> В вашем обозревателе решений создайте папку внутри Shared с именем " EditorTemplates "

-> Там добавьте новый ( не строго типизированный) Частичное представление . Назовите это "DateTime".

-> Откройте это представление, удалите любой код и добавьте туда следующий код:

@model System.DateTime
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "date" /* + any other html attributes you want */ })

-> В вашей ViewModel поле даты должно быть таким:

[Display(Name = "My Date:"), DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime MyDate { get; set; }

-> В вашем главном представлении и в любом представлении, в котором вы хотите использовать поле даты, вы можете просто использовать EditorFor в свойстве, например:

@Html.EditorFor(m => m.MyDate)

Вы можете инициализировать поле даты в вашем контроллере или установить дату по умолчанию в конструкторе вашей модели представления.

2 голосов
/ 11 ноября 2011

Я использую это, и оно отлично работает:

    @Html.TextBox("ExpiryDate", String.Format("{0:ddd, dd MMM yyyy}", DateTime.Now), new { id = "expirydate" })

Надеюсь, это то, что вы имеете в виду / нужно :)

...