2012-05-26 22 views
5

değerini, DefaultModelBinder.ResourceClassKey belirterek doğrulama hatalarının yerelleştirmesi hakkında okudum, temel olarak dize değerlerini int alanında girerken veya datetime alanında bir datetime girerken bulunuyor.Yerelleştirme "{0} değeri geçersiz" int taşması durumunda

Ancak "11111111111111111111111111111111" yazarken int alan için System.OverflowException olsun ve "The value '{0}' is invalid." gibi görünüyor.

Doğrulama hatasının diğer MVC doğrulamasına benzer şekilde yerelleştirilmesi (bu iletiyi başka dillere çevirme) için bir yolu var mı? ModelBinders.Binders.Add(typeof(int), new IntModelBinder()); ve şimdi gayet iyi çalışıyor:

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); 
    } 
} 

Sonra basitçe kayıtlı:

cevap

3

Aynı sorunu yaşadım ve sonunda çözümü bulmayı başardım. Evet, bu mesaj yerelleştirilebilir ve neyse ki bunu anladığınızda oldukça kolaydır.

Bir kaynak dosya oluşturup App_GlobalResources klasörüne koymalısınız. İstediğiniz dosyayı arayabilirsin, ancak genelde MvcValidationMessages olarak adlandırıyorum.

Kaynak dosyayı açın ve InvalidPropertyValue isimli bir dize oluşturun ve değer alanında istediğiniz herhangi bir mesajı yazın.

Şimdi Global.asax dosyasını açın ve yönteme Application_Start() aşağıdaki satırı ekleyin:

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

"MvcValidationMessages" elbette yeni oluşturduğunuz kaynak dosyanın doğru adı olmalıdır.

Ve voíla! Hepsi bu kadar var. Gösterilen mesaj, varsayılan olan yerine kendi başınıza olacaktır.

+0

Bu harika, teşekkürler! Sadece kontrol ettim ve işe yarıyor. :) – Shaddix

+0

Sadece daha yüksek sesle işaret etmek için ... 'System.Web.Mvc.Html.ValidationExtensions.ResourceClassKey' hile olduğunu. Teşekkürler! – Zoka

0

Ben int için ModelBinder geçersiz kılma ve orada yerelleştirilmiş hata mesajı besleyen sona erdi.

P.S. emin, benim yerelleştirilmiş hatamessage model binderde kodlanmamış, bu sadece basitleştirilmiş bir örnektir :)

İlgili konular