更改Html.DisplayFor布尔复选框MVC

TMa*_*Man 21 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) 
Run Code Online (Sandbox Code Playgroud)

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

小智 33

您可以使用显示模板格式化属性的显示方式.

在View文件DisplayTemplates夹下~/Shared或其中创建一个文件夹,该文件夹将存在将使用此模板的视图.

将新的局部视图添加到此文件夹.把它命名为你想要的任何东西,例如IsActive.cshtml

@model bool
@if (Model == true)
{
    @Html.Encode("Active")
}
@if (Model == false)
{
    @Html.Encode("Inactive")
}
Run Code Online (Sandbox Code Playgroud)

现在将数据注释添加到您的属性,让它知道使用此显示模板.

[UIHint("IsActive")]
public bool IsActive { get; set; }
Run Code Online (Sandbox Code Playgroud)

使用Html.DisplayFor与此注释任何布尔,它会根据与匹配名称的显示模板进行格式化.通过一些调整,您可以将颜色更改样式直接放在显示模板中.

  • 您还可以使用`Html.DisplayFor`的`templateName`参数应用模板. (4认同)

小智 6

这是一个老问题,但这可能对某人有所帮助。我遇到了完全相同的问题并使用@(IsFooBar ? "Yes" : "No").