更改Html.DisplayFor布尔复选框MVC

时间:2012-03-22 01:42:42

标签: asp.net asp.net-mvc-3

我有一个布尔属性IsActive。在视图中是一个包含其属性的对象列表(包括IsActive)。但是在列表中,IsActive是一个不可编辑的复选框,因为它是布尔值。如果我将DisplayFor()更改为DisplayTextFor(),那么它将只显示True或false而不是checkbox。如果Active为true且Inactive为false,我如何将True和false更改为“Active”和“Inactive”?

      @Html.DisplayTextFor(modelItem => item.IsActive) 

然后我会将'Active'设为绿色,将'Inactive'设为红色

4 个答案:

答案 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"]
}