Применение класса css с использованием Html.DisplayFor для просмотра бритвы

Внутри бритва я использовал модель для рендеринга, например,

 @Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })

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

@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })

этот класс css control-label col-md-6 не применяется. Почему?

Ответ 1

DisplayFor не работает, как другие *For помощников. Как и EditorFor, это то, что называется "шаблонный помощник". Другими словами, то, что он отображает, контролируется шаблоном, который можно изменить. Важно отметить, что для обоих этих методов, если вы смотрите их документацию в MSDN, вы увидите, что параметр, который будет нормально соответствуют htmlAttributes с другими помощниками, а не относится к additionalViewData с этими двумя. Это потому, что, опять же, их вывод контролируется по существу представлениями, которые принимают ViewData.

Кроме того, с DisplayFor в частности, шаблоны по умолчанию в значительной степени просто выводят значение без HTML. Например, если вы передадите строковое свойство, на выходе будет значение этой строки и ничего больше. Поэтому нет ничего, с чем можно связать атрибуты HTML, даже если вы можете передать их.

Если вы хотите сделать то, что вы пытаетесь сделать, вам придется создавать собственные шаблоны отображения. Это можно сделать, добавив представления с именами по типам (например, String, Boolean, Byte и т.д.) Или членами перечисления DataType (CreditCard, EmailAddress и т.д.) В Views\Shared\DisplayTemplates. Например, если вы создали представление в Views\Shared\DisplayTemplates\String.cshtml, то при вызове DisplayFor со свойством типа string это представление будет использоваться для его визуализации. Затем вы можете обернуть значение, которое в противном случае было бы просто выведено непосредственно в некоторый HTML по вашему выбору, и использовать ViewData для применения соответствующих атрибутов HTML. Например:

<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span>

Ответ 2

Разница заключается в том, что вспомогательная функция @Html.LabelFor отображает тег <label></label>, а вспомогательная функция @Html.DisplayFor не отображает какой-либо тэг html, вместо этого он отображает простой текст. Например, следующий код:

@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })

возвращает необработанный текст:

Martin

учитывая, что MyName имеет значение "Мартин". И код:

@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })

вернется:

<label class="control-label col-md-6">Martin</label>

Рассмотрим разницу.

Используйте следующий (если вы хотите использовать @Html.DisplayFor):

<span class"control-label col-md-6">@Html.DisplayFor(model => model.MyName)</span>

Ответ 3

Флажки изменения размера страниц .NET Core 2.2

Позже к игре, но нужно было сделать флажки огромными по сравнению с тем, как их отображает шаблон Razor. Потому что я хотел, чтобы пользователь видел, было ли это проверено или нет.

Я пробовал выше, не работал. Поэтому я использовал Chrome Developer Tool, чтобы посмотреть, что страница рендерит, и он показал это для флажка:

input[type="radio"], input[type="checkbox"] {
    box-sizing: border-box;
    padding: 0;
}

И я собирался найти его в файле CSS, потому что я мог использовать все флажки, чтобы быть больше. Тем не менее, он сказал, что находится здесь:

reboot.scss: 373

Теперь, я клянусь, он ссылался на другой файл scss, когда я впервые открыл в разработчику. Но так как для меня это выглядело как греческий, кодовый отрывок, я просто решил поместить это (после того, как попробовал это в стиле выше) вверху моей Razor Page. Обратите внимание, я только что клонировал скрытый стиль выше и добавил ширину и высоту:

<style>
    input[type="radio"],
    input[type="checkbox"] {
        box-sizing: border-box;
        width: 40px;
        height:40px;
    }
</style>

Теперь вот элемент управления Razor, который я отображал. В конце она заканчивается как флажок в html, но я считаю, что Razor Page достаточно умен, чтобы знать, что это поле True/False, и отображать его в виде текстового поля. Но. , , не раньше, чем он применил размеры, которые я добавил !! Надеюсь, это кому-нибудь поможет.

<td>
    @Html.DisplayFor(modelItem => item.Moderated)

</td>