【问题标题】:MVC model boolean display yes or noMVC 模型布尔显示是或否
【发布时间】:2013-12-18 17:49:53
【问题描述】:

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

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

我用这个电话

@item.isTrue

但我猜对了还是错了,

我想在 true 时得到 yes,在 false 时得到 no

请问我该怎么办?

【问题讨论】:

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


【解决方案1】:

在你看来:

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

【讨论】:

    【解决方案2】:

    您可以像这样使用自定义 html 帮助程序扩展方法:

    @Html.YesNo(item.IsTrue)
    

    下面是代码:

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

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

    【讨论】:

      【解决方案3】:

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

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

      然后你就可以到处使用了:

      @item.IsTrue.ToFriendlyString()
      

      【讨论】:

        【解决方案4】:

        在你的模型中这样写:

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

        Active 是一个布尔属性,我们创建 ISActive 属性来读取其值并向用户显示适当的消息。

        【讨论】:

        • 我喜欢这样的技术。
        【解决方案5】:

        这有点晚了,但是……

        其他答案错过的一个有用方法是自定义 DisplayTemplate 方法。 通过输入此代码:

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

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

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

        其中“YesNo”是您为局部视图命名的任何名称,减去 .cshtml 扩展名

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

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

        【讨论】:

          【解决方案6】:

          有一个类似于@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】:

            您可以根据自己的原因使用描述符道具:

            public bool? IsActive { get; set; }
            
            public string IsActiveDescriptor => IsActive.HasValue && IsActive ? "Yes" : "NO";
            

            【讨论】:

              【解决方案8】:

              如果您赶时间,或者您使用整数而不是位。 (我会这样做,以防你以后有第三个选择,而你的 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 设置为“是”或“否”,然后您只需在页面上按原样显示它(没有 @Html.DisplayFor(...) 标记。

              @{if (item.Active == 0){Active = "No";}else{Active = "Yes";}}
              @Active
              

              如果您还不知道,用@{} 将整个“if”语句括起来可以让生活变得轻松 - 括号内不需要@...

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-01
                • 2015-02-17
                • 1970-01-01
                • 2021-03-08
                相关资源
                最近更新 更多