您可以创建一个从DefaultControllerFactory
派生并覆盖GetControllerInstance
一个新的控制器工厂。我不知道你是如何执行客户检查,但它可能是这个样子:
public class CustomControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == typeof(DefaultProductController))
{
if(// is special customer)
return new SpecialProductController();
else
return new DefaultProductController();
}
}
}
你然后通过ControllerBuilder.Current
设置在Global.asax中的Application_Start新的ControllerFactory:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory());
RegisterRoutes(RouteTable.Routes);
}
chris,是这些如果**语句**控制器动作的一部分或嵌入视图? – 2010-12-09 10:28:30
嘿吉姆。目前作为控制器的一部分。如果选择某个产品,则创建发送到视图的新导航元素。但是控制它们的功能目前是主控制器的一部分,我觉得它们应该是另一个控制器的一部分? – Chris 2010-12-09 10:40:26