Html.TextBox для форматирования или Html.EditorFor htmlAttributes? - PullRequest
20 голосов
/ 12 мая 2011

Я немного озадачен, потому что я хочу отформатировать значение и добавить атрибут html для класса css.

Если я использую @Html.TextBoxFor(m => m.DateModified) - Я могу добавить атрибут html, но форматирование не работает через атрибут DisplayFormat на элементе.

Если я использую @Html.EditorFor(m => m.DateModified) - Форматирование работает, но я не могу добавить атрибут html

Если я использую @Html.TextBox("DateModified", Model.DateModified, ...) - я получаю исключение нулевой ссылки, когда Модель равна нулю, когда форма находится в режиме добавления

Каков наилучший способ достичь этого?

Ответы [ 5 ]

17 голосов
/ 02 июня 2011

Я решил эту проблему, создав собственный шаблон редактора для моего средства выбора даты следующим образом:

Shared / EditorTemplates / DateTime.cshtml

 @model System.DateTime? 
 @Html.TextBox("", Model.HasValue ? Model.Value.ToString("dd/MM/yyyy") : string.Empty, new { @class = "date-picker" })

Затем на моей исходной странице продолжайтеиспользуйте

@Html.EditorFor(m => m.DateModified)
10 голосов
/ 14 мая 2011

Вы могли бы ...

@Html.TextBoxFor(m => m.DateModified, new { Value = Model.DateModified.ToString("MM-dd-yyyy"), @class = "superCoolClassName"})
3 голосов
/ 26 мая 2011

Используйте @ Html.EditorFor (m => m.DateModified), потому что в противном случае атрибут DisplayFormat не будет иметь эффекта.

Чтобы добавить дополнительные атрибуты, такие как класс CSS, необходимо создать шаблон редактора дляDateTime.Создайте файл EditorTemplates / DateTime.cshtml со следующим содержимым:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new
{
    @class="date"
})

Обратите внимание, что значение TextBox устанавливается не непосредственно для модели, а для TemplateInfo.FormattedModelValue , потому что это значение будет отформатировано в соответствии с атрибутом DisplayFormat, а модель - нет.(Это заняло у меня довольно много времени, чтобы понять. :))

В простых случаях этого может быть достаточно, например, если класс CSS может быть одинаковым для всех редакторов дат.

Если вы хотитечтобы параметризовать атрибут, вы также можете сделать это, передав параметр-значение атрибута в EditorFor.

@Html.EditorFor(m => m.DateModified, new { @class = "someClass" })

Однако этот параметр не будет автоматически делегирован элементу управления HTML как атрибут, но вы должны явно «обработать» его в шаблоне.Согласно моему опыту, вы можете получить доступ к значению этого параметра в ViewData в шаблоне, поэтому параметризованный шаблон выглядит следующим образом:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new
    {
        @class=ViewData["class"]
    })
1 голос
/ 31 мая 2011

Чтобы избежать жесткого кодирования пар ключ / значение, перечисленных в EditorFor, преобразуйте объект ViewData в словарь и передайте этот объект словаря в TextBox.

например

    @Html.EditorFor(m => m.DateModified, "Template", new { @class = "someClass", size=8 , htmlTag="custom" }) 

А в шаблоне у вас есть

    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData.ToDictionary(c=>c.Key,c=>.Value))
0 голосов
/ 28 апреля 2012

Для отображения даты JSON в текстовом поле (cshtml):

var d1 = ui.item.IssueDate;
var d = new Date(parseInt(d1.slice(6, -2)));
var Issdate = ("0" + (d.getMonth() + 1)).slice(-2) + '/' + 
              ("0" + d.getDate()).slice(-2) + '/' + 
              d.getFullYear().toString();
$('#IssueDate').val(Issdate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...