2009-09-26 18 views
7

ローカライズ:ASP.NET MVC:ValidationAttributeと私は同じようValidationAttributeを持っているにErrorMessage

public class Username : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
    if (value == null) 
    return false; 

    return RegExp.Validate(RegExpLib.Username,value.ToString()); 
    } 
} 

..andこのようにそれを使用して:

public class AccountSignIn 
{ 
    [Username(ErrorMessageResourceName ="txtUsername",ErrorMessageResourceType=typeof(SignIn))] 
    public string Username { get; set; } 

    public string Password { get; set; } 

    public bool RememberMe { get; set; } 

    public string ReturnUrl { get; set; } 
} 

サインインがApp_GlobalResourcesでリソースファイルをであり、 "txtUsername" - リソースファイル内の文字列名です。

問題: エラーメッセージは表示されません。

質問: ウェブサイトに言語が少なくてもエラーメッセージを設定する方法

別情報:

私ができるビューからアクセスSignIn.txtUsernameまたはプロジェクト内の任意のファイルです。コントローラ

ModelState.AddModelError("Username", Resources.SignIn.txtUsername); 

からだけでなく正常に動作します..私はValidationAttribute内にErrorMessageを割り当てるが、2番目の検証がしようとした後、私はこのようにチェックし配置する場合...エラーを得たことができます -

if(ErrorMessage != Resources.SignIn.txtUsername) 
     ErrorMessage = Resources.SignIn.txtUsername; 

私は後にエラーが発生しています別の言語に切り替える - ErrorMessageは1回だけ割り当てることができます。

解決方法を教えてください。

ありがとうございます。

答えて

1

リソースエディタで、リソースの表示が「内部」ではなく「公開」に設定されていることを確認します。そうしないと、DataAnnotationsによる反映は機能しません。

+0

私はグローバルリソース "SignInはApp_GlobalResourcesのリソースファイル"を使用しています。 –

+0

残念ながら、App_GlobalResourcesのリソースを公開することはできません。代わりに "Properties"フォルダのリソースファイルを使用する必要があります - プロジェクトを右クリックし、プロパティを選択し、左メニューから "Resources"を選択して "this project ..."をクリックしてください。 "Resources.resx"というデフォルトのリソースファイルが作成されます。 [必須(ErrorMessageResourceName = "Password_Required"、ErrorMessageResourceType = typeof(Properties.ModelErrors))] – Feryt

+0

これは本当です。 DataAnnotationsはASP.NETの外部で使用されるため、App_XxxResourcesについては何も知らず、従来のリソースファイルでも動作します。 –

10

ローカライズされたエラーメッセージとDataAnnotationsの使用にはいくつか問題がありましたが、状況とほぼ同じです。空白がエラーメッセージとして表示されることはありませんでしたが、私はいつもいくつかの例外がスローされました。私のためのソリューションました:App_GlobalResources/Errors.resxで

  1. 、リソースファイルを開くことがアクションを構築するためのプロパティです変更します。埋め込まれたリソース、カスタムツール:PublicResXFileCodeGenerator、カスタムツール名前空間:リソース(Visual Studioがで奇妙な何かをリソースファイルのアクセス修飾子は、名前空間とアクセス修飾子があると生成されたコードファイル(Errors.Designer.cs)からチェックを

    公開

  2. に)

  3. 変更これらを自動生成するので、物事がOKであることを再度確認してください正しい。

  4. はモデルクラスから

私の例でそれを試してみてください。

[Required(ErrorMessageResourceType = typeof(Resources.Errors), ErrorMessageResourceName="ResponseMessageRequired")] 
public string message { get; set; } 
0

この質問はかなり古い見えます。 私のMVC3プロジェクトでresx(私のエラーメッセージストア)を属性パラメーターの型として使用しても、同様の問題がありました。

これは私の問題解決:

  • セット "Messages.resx" - 次のように変更する属性パラメータ
  • に "埋め込まれたリソース" "ビルドアクション" プロパティファイル: [Range(0, 999, ErrorMessageResourceType = typeof(Resources.Messages), ErrorMessageResourceName = "ERR_NUM_NOT_IN_RANGE")]

をお役に立てれば。

関連する問題