2017-06-13 26 views
0

我是这个品牌的新手。使用MVC 5,.NET 4.5.1和Entity FrameWork 6.1.3。我从一个Oracle数据库开始。MVC 5:如何在视图中显示字符串而不是数字

有一个称为Activity的字段,当前是一个小数字段。我想显示“不活动”或“活动”取决于它是否为0或1.

我可以在视图中使用If语句执行此操作,但我有索引,编辑,细节和创建我将不得不修改,如果是编辑和创建视图,则需要输入并将其转换回小数。

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

型号:

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

查看:

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

如果你关注的是重复布局代码,考虑使用'[ UIHint]'属性。 https://www.iambacon.co.uk/blog/use-display-and-editor-templates-ftw –

回答

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); 
} 

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

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

+1

很酷。我不知道这种技术。这应该是有用的。 –

+0

酷开心,它有用.. :) –

0

在模型中,对于十进制属性,你可以写两个组自定义代码和得到的,就没有必要进行更改查看任何。

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

否则使用此属性的枚举!

+0

哦,不错。我认为这需要在模型层面完成。我会给这个镜头。 –

+0

更新:它似乎没有工作。它不会让我返回一个字符串来获取或测试集合中的字符串值。 “不能将类型字符串隐式转换为十进制类型。”和“运算符==不能应用于十进制和字符串类型的操作数”。 –

0

您只需创建一个方法从十进制转换成字符串,反之亦然,并用它在你的查看和/或控制器。

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

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