2010-01-17 146 views
1

是否有可能使用某种Multibinders,像这样?ASP.NET MVC:多模型绑定

[Authorize] 
[AcceptVerbs("POST")] 
public ActionResult Edit([CustomBinder]MyObject obj) 
{ 
    ///Do sth. 
} 

当我也有配置的默认粘结剂是这样的:

protected void Application_Start() 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     RegisterRoutes(RouteTable.Routes); 

     ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder(); 
    } 

我想是有DataAnnotationsBinder(这验证了数据stringlength,正则表达式等)的好处,另外我的自定义活页夹设置字段值。

我不能只写1粘结剂这一点,因为使用EntitiyFramework并与它导致contstruct这样的DataAnnotations组合IAM:

[MetadataType(typeof(MyObjectMetaData))] 
    public partial class MyObject 
    { 
    } 


    public class MyObjectMetaData 
    { 
    [Required] 
    [StringLength(5)] 
    public object Storename { get; set; } 
    } 

回答

1

你可以尝试调用默认的模型绑定您的自定义模型绑定。

public class CustomBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, 
    ModelBindingContext bindingContext) { 
     MyObject o = (MyObject)ModelBinders.Binders 
      .DefaultBinder.BindModel(controllerContext, bindingContext); 
     //Your validation goes here. 
     return o; 
    } 
} 
1

为什么不直接从DataAnnotationsModelBinder继承?

public class MyBinder : DataAnnotationsModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     MyModel obj = (MyModel)base.BindModel(controllerContext, bindingContext); 
     //Do your operations 
     return obj; 
    } 
} 

ModelBinders.Binders[typeof(MyModel)] = new MyBinder();