【问题标题】:MVC 5: How to show a string instead of number in the viewsMVC 5:如何在视图中显示字符串而不是数字
【发布时间】:2017-11-15 21:21:12
【问题描述】:

我对此很陌生。在 .NET 4.5.1 和 Entity FrameWork 6.1.3 上使用 MVC 5。我从 Oracle 数据库开始。

有一个名为 Activity 的字段,目前是一个十进制字段。我想根据它是 0 还是 1 显示“非活动”或“活动”。

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

有更简单的方法吗?

型号:

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

查看:

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

【问题讨论】:

标签: c# asp.net-mvc entity-framework-6 asp.net-mvc-5


【解决方案1】:

通过利用 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);
}

注意:没有测试代码,希望它能工作

有关 Helper 扩展的更多信息https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/views/creating-custom-html-helpers-cs

【讨论】:

  • 酷。我不知道这种技术。这应该很有用。
【解决方案2】:

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

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

否则,对这个属性使用枚举!

【讨论】:

  • 哦,太好了。我在想这需要在模型级别完成。我会试一试。
  • 更新:它似乎不起作用。它不允许我返回一个字符串来获取或测试集合中的字符串值。 “不能将字符串类型隐式转换为十进制类型。”和“运算符 == 不能应用于十进制和字符串类型的操作数”。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-02-24
    • 2016-11-25
    • 1970-01-01
    • 2017-01-30
    • 2013-11-27
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多