在同一对象上有2个自定义模型绑定器

时间:2011-04-16 16:50:52

标签: c# asp.net-mvc modelbinders

我在合同上有一个自定义绑定器,用于验证我的登录用户是否可以查看此合同以及合同是否存在。我想有一个其他绑定器来验证合同是否存在,以及令牌是否良好,因为用户不需要登录。

是否可以在同一个对象上有2个绑定器?我该怎么做?

1 个答案:

答案 0 :(得分:2)

更新:

我检查了源码,你不能将两种自定义模型绑定器添加到一种类型。我对价值提供者感到困惑。

你基本上有两个选择,一个是创建一个大型模型绑定器(我认为这是更好的选择)。

另一种选择是创建一个模型绑定器提供程序,它返回一个满足特定需求的模型绑定器。

public class ContractModelBinderProvider : IModelBinderProvider
{
    public IModelBinder GetBinder(Type modelType)
    {
          if(modelType == typeof(Contract))
            {
                 if(LoggedIn)
                 {
                       return  new LoggedInContractBinder();
                 }
                 else
                 { 
                       return new NotLoggedContractBinder(); 
                 } 
            } 
           return null;
    }
}

然后你需要在你的DependencyResolver / IOC容器中注册添加它(在Global.asax - app start中):

ModelBinderProviders.BinderProviders.Add(new ContractModelBinderProvider());

我会考虑在模型装订器中使用授权逻辑。