Используя 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; }
}
Ответы
Ответ 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");
Это позволяет легче отображать произвольные значения.