代码之家  ›  专栏  ›  技术社区  ›  Josh

MVC 2.0-基于带有共享控件的URL的不同视图

  •  1
  • Josh  · 技术社区  · 14 年前

    我有两个母版页。一个是打算在一个正常的独立网站上显示。另一个将在外部站点中用作iframe。

    我想在 http://example.com/home/index 和iframed版本 http://example.com/framed/home/index

    我希望有将回发到一个控制器的控件,这样我就不必重复逻辑,所以它们必须在正常版本和iframed版本中都可用。

    我的问题是,当我尝试使用区域时,我只是无法让它们正确使用默认的URL。另外,我还有结构图的额外复杂性。当我尝试击中/区域/控制器/动作时,我会

    IControllerFactory 'mysite.web.code.ioc.structureMapControllerFactory' 没有为返回控制器 名称“MySale'”。

    有人知道如何使这种设置工作吗?实际上,我所做的只是尝试显示一组视图(如果它有/framed/controller/action)和另一组视图(如果它没有/framed)。我以为这是一条路,但也许不是。

    1 回复  |  直到 14 年前
        1
  •  1
  •   StriplingWarrior    14 年前

    我们的所有控制器都实现相同的基类,并且我们使用以下重写来执行您所描述的操作:

    protected override ViewResult View(string viewName, string masterName, object model)
    {
        if (masterName == null)
        {
            var options = PortalRequestManager.CurrentPortalRouteOptions;
            masterName = options.MvcMasterPath;
        }
        return base.View(viewName, masterName, model);
    }
    

    我们所有的区域注册都使用以下方法来注册它们的区域:

        public static void RegisterMvcAreaRoutes(AreaRegistrationContext context, string name, string url,
                                                 object defaults)
        {
            context.MapRoute(name + "Portal",
                             "P/Channel/" + url,
                             defaults);
            context.MapRoute(name + "FramePortal",
                             "F/Channel/" + url,
                             defaults);
        }
    

    然后,您在第一个代码块中看到的portalRequestManager解析该URL以查看它是否使用“/p”或“/f”来确定要使用哪个mvcmasterPath。

    我们使用的是Ninject的控制器工厂,它对这个设置没有任何问题,所以我不能真正告诉您有关结构映射的问题。