2011-01-24 20 views
9

için çalışmak için ASP.NET MVC 2 Model Binder'ı genişletme ASP.NET MVC 2 ile, model bağlayıcı öğesinin sırasıyla "1" ve "0" değerini true ve false olarak tanımayacağını fark ettim. Bunları tanımak ve bunları uygun boole değerlerine dönüştürmek için global global model bağlayıcıyı genişletmek mümkün mü?0, 1 booleans

Teşekkürler! Hatlar arasındaki

cevap

9

şey işini yapmalıdır:

public class BBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     if (value != null) 
     { 
      if (value.AttemptedValue == "1") 
      { 
       return true; 
      } 
      else if (value.AttemptedValue == "0") 
      { 
       return false; 
      } 
     } 
     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

ve Application_Start kayıt:

ModelBinders.Binders.Add(typeof(bool), new BBinder()); 
+1

: Uygulamaya Global.asax içinde Sonra

public class BooleanModelBinder : IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); // do checks here to parse boolean return (bool)value.AttemptedValue; } } 

eklemek başlamak ? –

+1

@Josiah, benim düşüncelerim 'DefaultModelBinder' ile ilgili endişelenecek bir tane daha az vakam var (varsayılan durum). IModelBinder kullanırsam, değerin True veya False değerine eşit olduğu durumu da işlemek zorunda kalacağım ve bu durum zaten varsayılan model bağlayıcı tarafından işleniyor, bu yüzden DRYer. –

+0

'BBinder' kullanmak istediğimi açıkça belirtmem gerekiyor mu yoksa Varsayılanın bir parçası olarak mı olacak? – jocull

2

kontrol dışarı this link. Görünüşe göre MVC2'de çalışıyor.

Sen (denenmemiş) gibi bir şey yapabileceğini: düşüncelerinizi DefaultModelBinder` `vs` IModelBinder` kullanma konusunda nelerdir

ModelBinders.Binders.Add(typeof(bool), new BooleanModelBinder()); 
+0

Cevabınız için teşekkürler. Varsayılan vakaları görmezden gelmek ya da yeniden tanımlamak isteseydim, bu benim kullandığım çözüm olurdu. – jocull

İlgili konular