我有一个布尔属性IsActive。在视图中是一个包含其属性的对象列表(包括IsActive)。但是在列表中,IsActive是一个不可编辑的复选框,因为它是布尔值。如果我将DisplayFor()更改为DisplayTextFor(),那么它将只显示True或false而不是checkbox。如果Active为true且Inactive为false,我如何将True和false更改为“Active”和“Inactive”?
@Html.DisplayTextFor(modelItem => item.IsActive)
然后我会将'Active'设为绿色,将'Inactive'设为红色
答案 0 :(得分:30)
您可以使用显示模板格式化属性的显示方式。
在DisplayTemplates
下或在将要使用此模板的视图所在的View文件夹中创建一个~/Shared
文件夹。
向此文件夹添加新的局部视图。将其命名为您想要的任何内容,例如: IsActive.cshtml
@model bool
@if (Model == true)
{
@Html.Encode("Active")
}
@if (Model == false)
{
@Html.Encode("Inactive")
}
现在将数据注释添加到您的属性中,让它知道使用此显示模板。
[UIHint("IsActive")]
public bool IsActive { get; set; }
在任何带有此注释的bool上使用Html.DisplayFor
,它将根据具有匹配名称的显示模板进行格式化。通过一些调整,您可以将颜色更改样式直接放在显示模板中。
答案 1 :(得分:3)
这是一个老问题,但这可能对某人有所帮助。我遇到了完全相同的问题,并用@(IsFooBar ? "Yes" : "No")
解决了。
答案 2 :(得分:2)
你可以试试这个:
@if (item.IsActive)
{
@string.Format("Active");
}
else
{
@string.Format("Inactive");
}
答案 3 :(得分:0)
我想补充Nightshifted的解决方案,以便它也可以与本地化字符串一起使用。此外,将@Html.Encode()
字符串与特殊字符一起使用时,编码错误。例如,“Kyllä”(芬兰语为“是”)编码错误。这就是为什么我的解决方案中根本没有@Html.Encode()
的原因。
此解决方案假定您使用的是本地化和SharedResources方法(请参阅ASP.NET Core Localization with help of SharedResources)
@using Microsoft.AspNetCore.Mvc.Localization
@model bool
@inject IHtmlLocalizer<SharedResources> L
@if (Model)
{
@L["Yes"]
}
else
{
@L["No"]
}