Модель MVC логический дисплей да или нет

Вы можете использовать встроенные стили, чтобы добавить стили custome в теги <option>.

Например: <option style="font-weight:bold;color:#09C;">Option 1</option> Это применит стили только к этому конкретному элементу <option>.

Затем вы можете использовать немного магии javascript для применения встроенных стилей ко всем элементам <option> в теге <select>, например:

var select = $(document).getElementById('#select-element-id')

var option = select.children('#option-element-id')

option.css('font-weight', 'bold')

option.css('font-size', '24px')

Вы также можете использовать <option value="" disabled> <br> </option>, чтобы добавить разрыв строки между варианты.

29
задан hutchonoid 15 December 2013 в 22:34
поделиться

8 ответов

По вашему мнению:

@(item.isTrue?"Yes":"No")
61
ответ дан Michael Dunlap 15 December 2013 в 22:34
поделиться

Вы можете использовать пользовательский метод расширения html, например:

@Html.YesNo(item.IsTrue)

Вот код для этого:

public static MvcHtmlString YesNo(this HtmlHelper htmlHelper, bool yesNo)
{
    var text = yesNo ? "Yes" : "No";
    return new MvcHtmlString(text);
}

Таким образом, вы можете использовать его на протяжении всей сайт с одной строкой кода Razor.

23
ответ дан hutchonoid 15 December 2013 в 22:34
поделиться

Вы можете использовать дескриптор реквизита по своей причине:

public bool? IsActive { get; set; }

public string IsActiveDescriptor => IsActive.HasValue && IsActive ? "Yes" : "NO";
2
ответ дан Working Hard.. 15 December 2013 в 22:34
поделиться

В вашей модели напишите что-то вроде этого:

public Nullable<bool> Active
{
    get;
    set;
}
public string ISActive
{
    get
    {
        return (bool)this.Active ? "Yes" : "NO";
    }
}

Active является логическим свойством, мы создаем свойство ISActive для чтения его значения и показываем соответствующее сообщение пользователю.

3
ответ дан Milad D Zand 15 December 2013 в 22:34
поделиться

Чтобы расширить ответ DigitalD, вы можете рассмотреть его в виде метода расширения:

public static string ToFriendlyString(this Boolean b)
{
    return b ? "Yes" : "No";
}

Затем вы можете использовать его повсеместно:

@item.IsTrue.ToFriendlyString()
4
ответ дан Ant P 15 December 2013 в 22:34
поделиться

Уже немного поздно, но ...

Одним из полезных методов, пропущенных другими ответами, является метод Custom DisplayTemplate. Поместив этот код:

@model bool
<p>@{Model ? "Yes" : "No"}</p>

в частичное представление (возможно, YesNo.cshtml) в папке «Шаблоны отображения» (/Views/Shared/DisplayTemplates). Затем, по вашему мнению, используйте эту строку:

@Html.Display(item.isTrue,"YesNo")

где «YesNo» - это то, что вы назвали своим частичным представлением, минус расширение .cshtml .

Добавляя вторую строку (templateName), вы указываете DisplayExtensions отображать логическое значение с вашим пользовательским шаблоном, а не метод по умолчанию (флажок).

Этот метод может быть не самым простым в этой ситуации, но он пригодится в более сложных ситуациях (например, например, в настраиваемом календаре для выбора дат)

2
ответ дан Lucas Niewohner 15 December 2013 в 22:34
поделиться

Если вы спешите или используете целое число вместо бита. (Я делаю это в случае, если у вас есть третий вариант позже, и ваш yes/no становится yes, no, octopus, как всегда делает мой, вот простой и быстрый грязный способ ... объявить вашу переменную в верхней части Razor view:

@model MyModel
@using My.Models;
@{
    ViewBag.Title = "Index";
    ViewBag.ReturnUrl = "";
    string Active = ""; //This will hold your "Yes" or "No"
 }

По мере того, как вы просматриваете свои элементы ... Следующий код установит для вашей строковой переменной Active значение «Да» или «Нет», а затем вы просто отобразите ее как есть на страница (без разметки @Html.DisplayFor(...).

@{if (item.Active == 0){Active = "No";}else{Active = "Yes";}}
@Active

Если вы еще не знаете, окружение всего оператора «если» с @{} облегчает жизнь - нет необходимости в @) в скобках ...

0
ответ дан Dan B 15 December 2013 в 22:34
поделиться

Существует решение, аналогичное @Lucas Niewohner's, взятое из Скотта по написанию .NET .

Создайте шаблон DisplayTemplate с именем YesNo.cshtml:

@model bool
@if (Model)
{
    @Html.Raw("Yes")
}
else
{
    @Html.Raw("No")
}

Затем украсьте ViewModel с помощью UIHint, чтобы подключить его:

public class foo
{
...
[UIHint="YesNo"]
public bool SomeBooleanValue { get; set; }
...
}

Теперь вы можете использовать своих помощников MVC как обычно:

...
@Html.DisplayFor (x=> x.SomeBooleanValue)
...

Вы можете сделать еще один шаг, чтобы создать EditorTemplate YesNo.cshtml:

@model bool
@Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model }})

Этот подход особенно полезен, если вы хотите использовать ViewModel в несколько мест с последовательной реализацией, так как вам нужно только связать шаблон в одном месте.

0
ответ дан Wildcat Matt 15 December 2013 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: