MVC 模型布尔显示是或否
Posted
技术标签:
【中文标题】MVC 模型布尔显示是或否【英文标题】:MVC model boolean display yes or no 【发布时间】:2013-12-18 17:49:53 【问题描述】:我在 mvc 4 实体框架 4.5 中的模型中有一个布尔字段
我想在我的视图中显示该字段
我用这个电话
@item.isTrue
但我猜对了还是错了,
我想在 true 时得到 yes,在 false 时得到 no
请问我该怎么办?
【问题讨论】:
***.com/questions/20270754/… 【参考方案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";elseActive = "Yes";
@Active
如果您还不知道,用@
将整个“if”语句括起来可以让生活变得轻松 - 括号内不需要@
...
【讨论】:
以上是关于MVC 模型布尔显示是或否的主要内容,如果未能解决你的问题,请参考以下文章