到目前为止,这是我的页面代码:
@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>
对于我模型中的所有可空bool(bool?
),这会显示一个带有Not Set,True或False的灰色选择列表。我希望它只是纯文本:未设置,是或否。
我怎样才能最轻松地实现这一目标?我希望这种风格在我的网站上是全球性的。
修改
根据Mark的回答,我只是试着制作一个模板,但细节页看起来完全一样。
我创建了一个bool.cshtml文件并将其放在以下文件夹中:
[ProjectFolder] /查看/共享/ 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; }
}
答案 0 :(得分:11)
您可能希望覆盖默认模板。简而言之,在views文件夹下,您将创建一个“DisplayTemplates”文件夹和一个“EditorTemplates”文件夹。完成此操作后,您可以在模型为Boolean.cshtml
的每个文件中创建一个bool?
文件。然后,就显示选项而言,你可以做任何你想做的事情。这将更改所有bool?
模型字段的呈现方式。
以下是我多次提到过的一篇博文,以帮助我解决这个问题。 http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html
更新:提醒一句,请记住处理null
案件。我过去忘记这样做了,它已经咬了我。
答案 1 :(得分:6)
模板文件是实现网站范围实施的方法。但我会用扩展方法更进一步。
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");
这样可以更轻松地显示任意值。