如何根据MVC中的其他参数值在运行时更改Displayname值?

时间:2011-05-31 15:11:04

标签: asp.net-mvc

[DisplayName("Planned Amt($):")]  
 public string PlannedAmount { get; set; } 
 [DisplayName("Unallocated Amt($):")] 
 public string UnallocatedAmount { get; set; }

我的班级中有这些成员。基于budgetType变量值,我需要更改两个属性的DisplayName值。请让我知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

您应该只能从DisplayNameAttribute继承并覆盖DisplayName属性:

public class DisplayNameExAttribute : DisplayNameAttribute
{
    public override string DisplayName
    {
        get
        {
            // do what you want here.
            return base.DisplayName;
        }
    }
}

我实际上并没有尝试过这样做,因此有可能对DisplayName属性进行编码,以便必须使用其他扩展点,但我会尝试确认。

答案 1 :(得分:1)

您可以像这样从DisplayNameAttribute继承:

public class BudgetDisplayNameAttribute : DisplayNameAttribute
{
    public BudgetDisplayNameAttribute(string pBaseName) : base(pBaseName) { }

    public override string DisplayName
    {
        get
        {
            return My.BudgetType + " " + base.DisplayName;
        }
    }
}

在此示例中,My.BudgetType是公共静态类中的公共静态字符串:

public static class My
{
    public static string BudgetType = "Quarterly";
}

然后将属性应用于您的属性,如下所示:

[BudgetDisplayName("Planned Amt($):")]  
public string PlannedAmount { get; set; } 
[BudgetDisplayName("Unallocated Amt($):")] 
public string UnallocatedAmount { get; set; }

最后,使用属性的DisplayName属性的程序部分将获得文本:

“季度计划金额($):”作为PlannedAmount属性

UnallocatedAmount属性的“季度未分配金额($):”