dev*_*xer 11 asp.net-mvc templates razor asp.net-mvc-3
到目前为止,这是我的页面代码:
@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>
Run Code Online (Sandbox Code Playgroud)
对于bool?我的模型中的所有可空的bools(),这将显示一个带有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>
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎对我的详细信息页面没有任何影响.
知道我做错了什么吗?
编辑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; }
}
Run Code Online (Sandbox Code Playgroud)
Mar*_* S. 12
您可能希望覆盖默认模板.简而言之,在views文件夹下,您将创建一个"DisplayTemplates"文件夹和一个"EditorTemplates"文件夹.完成此操作后,您可以Boolean.cshtml在模型所在的每个文件中创建一个文件bool?.然后,就显示选项而言,你可以做任何你想做的事情.这将更改所有bool?模型字段的呈现方式.
这是一篇博文,我已经多次提到过,以帮助我解决这个问题. http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html
更新:一句谨慎,记得处理null此案.我过去忘记这样做,它咬了我.
模板文件是实现站点范围实现的方法.但我会用扩展方法更进一步.
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");
Run Code Online (Sandbox Code Playgroud)
这样可以更轻松地显示任意值.
| 归档时间: |
|
| 查看次数: |
13068 次 |
| 最近记录: |