Asp.net 更改Html.DisplayFor boolean复选框MVC
我有一个布尔属性IsActive。视图中是对象及其属性(包括IsActive)的列表。但在列表中,IsActive是一个不可编辑的复选框,因为它是布尔值。如果我将DisplayFor()更改为DisplayTextFor(),那么它将只显示True或false而不是复选框。如何将True和false更改为“Active”和“Inactive”,其中Active为True,Inactive为falseAsp.net 更改Html.DisplayFor boolean复选框MVC,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,我有一个布尔属性IsActive。视图中是对象及其属性(包括IsActive)的列表。但在列表中,IsActive是一个不可编辑的复选框,因为它是布尔值。如果我将DisplayFor()更改为DisplayTextFor(),那么它将只显示True或false而不是复选框。如何将True和false更改为“Active”和“Inactive”,其中Active为True,Inactive为false @Html.DisplayTextFor(modelItem => item.
@Html.DisplayTextFor(modelItem => item.IsActive)
然后我会将“活动”设置为绿色,将“非活动”设置为红色。您可以使用显示模板来设置属性显示方式的格式 在
~/Shared
下或将使用此模板的视图所在的视图文件夹中创建一个DisplayTemplates
文件夹
将新的局部视图添加到此文件夹。可以随意命名,例如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
,它将根据具有匹配名称的显示模板进行格式化。通过一些调整,您可以将颜色更改样式直接放置在显示模板中。您可以尝试以下操作:
[UIHint("IsActive")]
public bool IsActive { get; set; }
@if (item.IsActive)
{
@string.Format("Active");
}
else
{
@string.Format("Inactive");
}
这是一个老问题,但这可能会帮助一些人。我遇到了完全相同的问题,并用
@(IsFooBar?“是”:“否”)
解决了这个问题。我想补充Nightshift的解决方案,以便它也能很好地处理本地化字符串。此外,使用@Html.Encode()
带有特殊字符的字符串编码错误。例如,“Kyllä”(芬兰语表示Yes)的编码错误。这就是为什么我的解决方案中根本没有@Html.Encode()
此解决方案假定您正在使用本地化与SharedResources方法(请参阅)
@使用Microsoft.AspNetCore.Mvc.Localization
@模型布尔
@注入IHtmlLocalizer L
@if(型号)
{
@L[“是”]
}
其他的
{
@L[“否”]
}
您还可以使用Html.DisplayFor
的templateName
参数应用模板。我在中添加了一个完整的示例。