MVC 5:如何在视图中显示字符串而不是数字



我是全新的。在 .NET 4.5.1 和实体框架 6.1.3 上使用 MVC 5。我从Oracle数据库开始。

有一个名为"活动"的字段当前是十进制字段。我想显示"非活动"或"活动",具体取决于它是 0 还是 1。

我可以使用 If 语句在视图中执行此操作,但我有索引、编辑、详细信息和创建的视图,我必须修改这些视图,对于"编辑"和"创建"视图,我需要获取输入并将其转换回小数。

有没有更简单的方法可以做到这一点?

型:

[DisplayName("Active")]
    public decimal? ACTIVE { get; set; }

视图:

@if (Html.DisplayFor(modelItem => item.ACTIVE).Equals("0"))
{
   @:Inactive
}
else
{
   @:Active
}

通过利用 HTML 帮助程序,可以减少创建标准 HTML 页面时必须执行的繁琐的 HTML 标记键入量

根据您的要求的示例代码:

在您看来:

@Html.ActiveOrInactive(item.ACTIVE)

帮助程序扩展代码:

public static MvcHtmlString ActiveOrInactive(this HtmlHelper htmlHelper, decimal invNo)
{
    var text = (invNo == 0) ? "InActive" : "Active";
    return new MvcHtmlString(text);
}

注意:没有测试代码并希望它会工作

有关帮助程序扩展的详细信息:https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/views/creating-custom-html-helpers-cs

在模型中,对于十进制属性,您可以为 set 和 get 编写自定义代码,无需对视图进行任何更改。

    get
    {
        return this.isActive==1? "Active":"InActive";
    }
    set
    {
        this.isActive = value=="Active"?1:0;
    }

否则对此属性使用枚举!

您可以创建一个从小数转换为字符串的方法,反之亦然,并在视图和/或控制器上使用它。

public static string DisplayStatus(decimal? number)
{
    return number == 1 ? "Active" : "Inactive";
}
public static decimal ConvertStatus(string status)
{
    return status == "Active" ? 1 : 0;
}