Пользовательский редактор для шаблона и htmlAttributes - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь использовать Editor для пользовательских шаблонов.

Я хочу создать Int32 и десятичные шаблоны для визуализации входных данных с некоторыми проверками.

Это то, что я пытаюсь

@model int?

@Html.TextBoxFor(model => model, null, new { @type="text", @oninput = "this.value=this.value.replace(/[^0-9]/g,'')" } )

И я называю это как

@Html.EditorFor(x => x.ExampleIntField)

Оказывает <input type="text", oninput="this.value=this.value.replace(/[^0-9]/g,'')"

Здесь все работает, но когда я пытаюсь передать дополнительные атрибуты html вроде readonly, я не понимаю, как я должен получить его в шаблоне EditorFor.

Пример

@Html.EditorFor(x => x.ExampleIntField, new { htmlAttributes = new { @readonly = "readonly" } } )

Я попробовал это, я получил точно такой же <input type="text", oninput="this.value=this.value.replace(/[^0-9]/g,'')" отрендеренный без readonly attribute

1 Ответ

0 голосов
/ 27 апреля 2018

Вы используете перегрузку из EditorFor(), которая передает объект как additionalViewData. Вы можете прочитать это в шаблоне из ViewDataDictionary

@model int?
@{ var attributes = ViewData["htmlAttributes"]; } // returns { @readonly = "readonly" }

, который можно затем объединить с существующими атрибутами и использовать в методе TextBoxFor().

@{
    var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attributes);
    htmlAttributes.Add("oninput", "this.value=this.value.replace(/[^0-9]/g,'')";
}
@Html.TextBoxFor(model => model, htmlAttributes)

Обратите внимание, что TextBoxFor() генерирует type="text", поэтому нет необходимости добавлять его снова. Кроме того, вам не нужен начальный @, если только это не зарезервированное ключевое слово (например, @class = "...")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...