7

を指定して検証エラーのローカリゼーションに関する回答を読みましたDefaultModelBinder.ResourceClassKey。基本的には、int フィールドに文字列値を入力するか、日時フィールドに日時を入力しない場合です。

しかし、intフィールドに「11111111111111111111111111111」と入力するSystem.OverflowExceptionと、次のようになり"The value '{0}' is invalid."ます。

他の MVC 検証と同様の方法でその検証エラーをローカライズ (そのメッセージを他の言語に翻訳) する方法はありますか?

4

2 に答える 2

4

I had the same issue, and I finally managed to find the solution. Yes, that message can be localized, and luckily it's pretty easy when you figure it out.

You have to create a resource file and put it in the App_GlobalResources folder. You can call the file whatever you want, but I usually call it MvcValidationMessages.

Open the resource file and create a string with the name InvalidPropertyValue and write whatever message you want in the value field.

Now, open the Global.asax file and add the following line to the method Application_Start():

System.Web.Mvc.Html.ValidationExtensions.ResourceClassKey = "MvcValidationMessages";  

"MvcValidationMessages" should of course be the correct name of the resource file you just created.

And voíla! That's all there is to it. The message shown will now be your own instead of the default one.

于 2013-02-03T11:08:08.437 に答える
0

ModelBinder をオーバーライドしてint、そこでローカライズされたエラー メッセージを提供することになりました。

public class IntModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        double parsedValue;
        if (double.TryParse(value.AttemptedValue, out parsedValue))
        {
            if ((parsedValue < int.MinValue || parsedValue > int.MaxValue))
            {
                var error = "LOCALIZED ERROR MESSAGE FOR FIELD '{0}' HERE!!!";
                bindingContext.ModelState.AddModelError(bindingContext.ModelName, string.Format(error, value.AttemptedValue, bindingContext.ModelMetadata.DisplayName));
            }
        }
        return base.BindModel(controllerContext, bindingContext);
    }
}

それから私は単にそれを登録しました:ModelBinders.Binders.Add(typeof(int), new IntModelBinder());そして今はうまくいきます。

PS確かに、私のローカライズされたエラーメッセージはモデルバインダーにハードコードされていません。これは単純化された例です:)

于 2012-06-11T06:12:32.883 に答える