如何避免ASP.NET MVC Display属性中的字符串类型代码?

时间:2012-07-21 08:52:31

标签: c# asp.net-mvc data-annotations

DataAnnotations.Display属性与本地化字符串结合使用时,使用的语法如下:

public class Customer
{
    [Display(ResourceType = typeof(DisplayResources), Name = "LName")]
    public string LastName { get; set; }
}

来源:MSDN

显然,以下语法是不可能的:

public class Customer
{
    [Display(Name = DisplayResources.LName)]
    public string LastName { get; set; }
}

因为它导致以下编译错误:

  

属性参数必须是属性参数类型

的常量表达式,typeof表达式或数组创建表达式

我还能做些什么来避免通过字符串传递变量?有没有办法避免使用字符串类型的代码?

1 个答案:

答案 0 :(得分:1)

前Telerik成员Kazi Manzur Ra​​shid有一篇文章。 Localization with ASP.NET MVC ModelMetadata。他正在解释如何使用漂亮的框架MvcExtensionshelp articles

以下是一个例子:

public class ProductEditModelConfiguration : ModelMetadataConfiguration<ProductEditModel>
{
    public ProductEditModelConfiguration()
    {
        Configure(model => model.Id).Hide();

        Configure(model => model.Name).DisplayName(() => LocalizedTexts.Name)
            .Required(() => LocalizedTexts.NameCannotBeBlank)
            .MaximumLength(64, () => LocalizedTexts.NameCannotBeMoreThanSixtyFourCharacters);

        Configure(model => model.Category).DisplayName(() => LocalizedTexts.Category)
            .Required(() => LocalizedTexts.CategoryMustBeSelected)
            .AsDropDownList("categories", () => LocalizedTexts.SelectCategory);

        Configure(model => model.Price).DisplayName(() => LocalizedTexts.Price)
            .FormatAsCurrency()
            .Required(() => LocalizedTexts.PriceCannotBeBlank)
            .Range(10.00m, 1000.00m, () => LocalizedTexts.PriceMustBeBetweenTenToThousand);
    }
}