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

Используя Razor, как мне сделать все "bool?"? свойства отображаются как Да/Нет/Не заданы на страницах с подробной информацией?

Вот мой код страницы:

@model TennisClub.Models.ClubMember
@{
    ViewBag.Title = "Details";
}
<h2>
    Details
</h2>
<fieldset>
    <legend>ClubMember</legend>
    @Html.DisplayForModel()
</fieldset>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.Id }) |
    @Html.ActionLink("Back to List", "Index")
</p>

Для всех нулевых переменных bools (bool?) в моей модели это отображает затемненный список выбора с помощью Не заданного, Истинного или Ложного. Я бы хотел, чтобы это был просто текст: либо Не задано, ни да, ни Нет.

Как я могу достичь этого проще всего? Я бы хотел, чтобы этот стиль был глобальным на моем сайте.

Edit

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

Я создал файл bool.cshtml и поместил его в следующую папку:

[ProjectFolder]/Views/Shared/DisplayTemplates

Вот что у меня для моего шаблона bool.cshtml на данный момент:

@model bool?

@if (Model == null)
{
    <text>Not Set</text>
}
else
{
    if (Model.Value)
    {
        <text>Yes</text>
    }
    else
    {
        <text>No</text>
    }
}

Это, похоже, не влияет на мои страницы сведений.

Любая идея, что я делаю неправильно?

Изменить 2

Здесь мой модельный класс:

public class ClubMember
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
    public string PhoneNumber { get; set; }
    public string PhoneType { get; set; }
    public bool? CanPlayDays { get; set; }
    public bool? CanPlayEvenings { get; set; }
    public bool? CanPlayWeekends { get; set; }
    public string Role { get; set; }
}
4b9b3361

Ответ 1

Вы хотите переопределить шаблон по умолчанию. Короче говоря, в вашей папке views вы должны создать папку "DisplayTemplates" и папку "EditorTemplates". После этого вы можете создать файл Boolean.cshtml в каждом, где Model bool?. Затем вы можете делать все, что захотите, по мере того, как отображаются параметры отображения. Это изменит способ отображения всех полей модели bool?.

Вот сообщение в блоге, которое я неоднократно упоминал, чтобы помочь мне разобраться в этом. http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

ОБНОВЛЕНИЕ: одно слово предостережения, не забудьте обработать случай null. Я забыл это сделать в прошлом, и это укусило меня.

Ответ 2

Файл шаблона - это способ реализации сайта. Но я бы сделал еще один шаг вперед с помощью метода расширения.

public static string ToString(this bool? b, string ifTrue, string ifFalse, string ifNull)
{
   if(!b.HasValue) return ifNull;
   return b.Value ? ifTrue : ifFalse;
}
Boolean.ToString("Yes","No","Not Set");

Это позволяет легче отображать произвольные значения.