MVC模型布尔显示是或否

时间:2013-12-02 21:24:56

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我的模型中有mvc 4实体框架4.5中的布尔字段

我想在我的视图中显示该字段

我使用此电话

@item.isTrue

但我得到了真或假,

我想在得到真的时候得到肯定而在假的时候是肯定的

我该怎么办?

8 个答案:

答案 0 :(得分:60)

在您看来:

@(item.isTrue?"Yes":"No")

答案 1 :(得分:23)

你可以使用这样的自定义html助手扩展方法:

@Html.YesNo(item.IsTrue)

以下是此代码:

public static MvcHtmlString YesNo(this HtmlHelper htmlHelper, bool yesNo)
{
    var text = yesNo ? "Yes" : "No";
    return new MvcHtmlString(text);
}

通过这种方式,您可以使用一行Razor代码在整个站点中重复使用它。

答案 2 :(得分:4)

要扩展DigitalD的答案,您可以考虑将其包装在扩展方法中:

public static string ToFriendlyString(this Boolean b)
{
    return b ? "Yes" : "No";
}

然后你可以在整个地方使用它:

@item.IsTrue.ToFriendlyString()

答案 3 :(得分:2)

在你的模型中写下这样的东西:

public Nullable<bool> Active
{
    get;
    set;
}
public string ISActive
{
    get
    {
        return (bool)this.Active ? "Yes" : "NO";
    }
}

活动是一个布尔属性,我们创建 ISActive 属性以读取其值并向用户显示相应的消息。

答案 4 :(得分:2)

这有点晚了,但是......

其他答案答案遗漏的一个有用方法是Custom DisplayTemplate方法。 通过这个代码:

@model bool
<p>@{Model ? "Yes" : "No"}</p>

进入显示模板文件夹(YesNo.cshtml)中的部分视图(可能是/Views/Shared/DisplayTemplates)。然后,在您的视图中,使用以下行:

@Html.Display(item.isTrue,"YesNo")

其中&#34;是否&#34;是您命名为部分视图的任何内容,减去.cshtml扩展名

通过添加第二个字符串(templateName),您可以告诉DisplayExtensions显示带有自定义模板的布尔值,而不是默认方法(复选框)。

对于这种情况,这种方法可能不是最简单的方法,但它可以用于更复杂的情况(例如,用于选择日期的自定义日历)

答案 5 :(得分:0)

如果您匆忙,或者使用整数而不是位。 (我这样做是为了以后你有第三个选项而你的yes/no变成yes, no, octopus,就像我一直似乎做的那样,这里是简单明了的简单方法...... 在Razor视图的顶部声明您的变量:

@model MyModel
@using My.Models;
@{
    ViewBag.Title = "Index";
    ViewBag.ReturnUrl = "";
    string Active = ""; //This will hold your "Yes" or "No"
 }

当您浏览项目时......以下代码会将您的字符串变量Active设置为“是”或“否”,然后您只需将其显示在页面上(没有{{1标记。

@Html.DisplayFor(...)

如果你还不知道,用@{if (item.Active == 0){Active = "No";}else{Active = "Yes";}} @Active 围绕整个“if”语句可以简化生活 - 括号内不需要@{} ......

答案 6 :(得分:0)

有一个类似于@Lucas Niewohner的解决方案,取自Scott on Writing .NET

创建一个名为YesNo.cshtml的DisplayTemplate:

@model bool
@if (Model)
{
    @Html.Raw("Yes")
}
else
{
    @Html.Raw("No")
}

然后用UIHint装饰ViewModel以将其连接起来:

public class foo
{
...
[UIHint="YesNo"]
public bool SomeBooleanValue { get; set; }
...
}

现在,您可以照常使用MVC帮助器:

...
@Html.DisplayFor (x=> x.SomeBooleanValue)
...

您还可以进一步创建一个EditorTemplate YesNo.cshtml

@model bool
@Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model }})

如果您希望在多个地方使用ViewModel并实现一致的方法,则这种方法特别有用,因为您只需要将模板关联到一个地方。

答案 7 :(得分:0)

出于您的原因,您可以使用描述符道具:

public bool? IsActive { get; set; }

public string IsActiveDescriptor => IsActive.HasValue && IsActive ? "Yes" : "NO";