Подтвердить что ты не робот

Html.TextBoxFor форматирование или Html.EditorFor htmlAttributes?

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

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

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

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

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

4b9b3361

Ответ 1

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

Общий/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)

Ответ 2

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

@Html.TextBoxFor(m => m.DateModified, new { Value = Model.DateModified.ToString("MM-dd-yyyy"), @class = "superCoolClassName"})

Ответ 3

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

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

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

Обратите внимание, что значение TextBox не задано с помощью модели напрямую, а скорее с TemplateInfo.FormattedModelValue, потому что это значение будет отформатировано в соответствии с атрибутом DisplayFormat, а Model not. (Мне потребовалось некоторое время, чтобы понять.))

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

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

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

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

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

Ответ 4

Чтобы предотвратить hardcoding пары ключ/значение, перечисленные в 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))

Ответ 5

Чтобы показать дату 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);