2012-05-26 76 views
5

我已閱讀answers關於驗證錯誤的本地化,通過指定DefaultModelBinder.ResourceClassKey,基本上是在int字段中輸入字符串值或不在datetime字段中輸入日期時間。在int溢出的情況下,「值{0}無效的本地化

但是,當我爲int字段鍵入「111111111111111111111111111111」時,我得到了System.OverflowException,它看起來像"The value '{0}' is invalid."

有沒有一種方法可以將驗證錯誤本地化(將該消息轉換爲其他語言),其方式類似於其他MVC驗證?

回答

3

我有同樣的問題,我終於設法找到解決方案。是的,該消息可以被本地化,幸運的是,當你發現它時很容易。

您必須創建資源文件並將其放入App_GlobalResources文件夾中。您可以隨意調用該文件,但我通常將其稱爲MvcValidationMessages。

打開資源文件並創建一個名稱爲InvalidPropertyValue的字符串,然後在值字段中輸入所需的任何消息。

現在,打開Global.asax文件並將以下行添加到方法Application_Start()

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

「MvcValidationMessages」當然應該是你剛剛創建的資源文件的正確名稱。

和voíla!這裏的所有都是它的。顯示的信息現在將成爲您自己的信息,而不是默認信息。

+0

太棒了,謝謝!只是檢查,它的工作原理。 :) – Shaddix

+0

只是爲了更大聲地指出......'System.Web.Mvc.Html.ValidationExtensions.ResourceClassKey'是個訣竅。謝謝! – Zoka

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());,現在工作得很好。

P.S.當然,我的本地化錯誤信息並沒有在模型庫中進行硬編碼,這只是一個簡化的例子:)

相關問題