0

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 式、または属性パラメーター タイプの配列作成式でなければなりません

文字列を介して名前で変数を渡すことを避けるために、他に何ができますか? 文字列型のコードを回避する方法はありますか?

4

1 に答える 1

1

元 Telerik メンバーの Kazi Manzur Ra​​shid からの記事があります。ASP.NET MVC ModelMetadata によるローカリゼーション。彼はそこで素晴らしいフレームワークMvcExtensionsの使用方法を説明しています(ヘルプ記事)

以下に例を示します。

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);
    }
}
于 2012-07-21T09:14:28.973 に答える