Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 更改Html.DisplayFor boolean复选框MVC_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

Asp.net 更改Html.DisplayFor boolean复选框MVC

Asp.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.

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

      @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
参数应用模板。我在中添加了一个完整的示例。