0

Account.CS ファイルでリソースを宣言するのに問題があります。これが私のコードです:

    [Required(ErrorMessageResourceName= typeof @DbRes.T("Account", "EmailAddress")]
    [Required(ErrorMessageResourceName = (@DbRes.T("EmailAddress", "Account")))]
    [DataType(DataType.EmailAddress)]
    [Display(Name = DbRes.T("EmailAddress", "Account"))]
    public string EmailAddress { get; set; }
4

2 に答える 2

3

MVC および検証属性で Westwind.Globalization を確実に使用できます。MVC 検証は厳密に型指定されたリソースと型マッピングに依存しているため、これを機能させるには、厳密に型指定されたリソースを dbResource ファイルからエクスポートします。これにより、db リソース内の ResourceSet ごとに厳密に型指定されたカスタム クラスが作成されます。

厳密に型指定されたリソース クラスは次のようになります。

public class Resources
{
    public static System.String NameIsRequired
    {
        get
        {
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
                return (System.String) HttpContext.GetGlobalResourceObject("Resources","NameIsRequired");
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
                return ResourceManager.GetString("NameIsRequired");

            return DbRes.T("NameIsRequired","Resources");
        }
    }


    public static System.String AddressIsRequired
    {
        get
        {
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
                return (System.String) HttpContext.GetGlobalResourceObject("Resources","AddressIsRequired");
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
                return ResourceManager.GetString("AddressIsRequired");

            return DbRes.T("AddressIsRequired","Resources");
        }
    }

    ... any others in the same resource set
}

これは、同じクラス (DbRes ResourceManager、dbRes ASP.NET ResourceProvider、またはプレーンな Resx.

その後、ASP.NET MVC モデルの検証属性で標準の Resx の厳密に型指定されたリソースを参照するのと同じ方法で、厳密に型指定されたリソースを参照できます。

public class ViewModelWithLocalizedAttributes
{
    [Required(ErrorMessageResourceName = "NameIsRequired", ErrorMessageResourceType = typeof(Resources))]
    public string Name { get; set; }

    [Required(ErrorMessageResourceName = "AddressIsRequired", ErrorMessageResourceType = typeof(Resources))]
    public string Address { get; set; }
}

サンプル プロジェクトに例があります。モデル フォルダーを開くと、モデルと、そのビューをローカライズされた値で使用する ModelAttributesFromResources.cshtml ビューが表示されます。

これについても説明している wiki のトピックがあります。

https://github.com/RickStrahl/Westwind.Globalization/wiki/Model-Validation-Message-for-ASP.NET-and-EntityFramework

于 2015-03-16T05:58:36.250 に答える
2

Westwind ドキュメント: Westwind.Globalization ASP.NET MVC サポートには、次のように記載されています。

MVC アプリケーションは、App_LocalResources と App_GlobalResources の ASP.NET リソース アーキテクチャを使用しないことで最適に機能します。MVC はコントロールを使用しないため、Web フォーム ベースのプロバイダー システムが提供する宣言型マークアップのコントロール ルックアップの利点は、MVC アプリケーションでは失われます。代わりに、MVC アプリケーションは、.NET プロジェクトで定義され、厳密に型指定されたリソースとして公開されている従来のリソースで最適に動作する傾向があります。

そのため、RESX ファイルの編集をより簡単にする以外に、Westwind には解決策がないようです。

//編集: Ricks のコメントを参照してください: [...] db リソースから厳密に型指定されたリソースを生成し、それらを同じ方法で使用できます。[...] Wikiに別のトピックがあります。

于 2015-01-26T14:26:15.927 に答える