【问题标题】:Trouble setting a default controller in MVC 2 RC Area在 MVC 2 RC 区域中设置默认控制器时遇到问题
【发布时间】:2010-01-11 23:43:46
【问题描述】:

这应该很简单,但是唉...

我在我的 MVC 2 项目(单个项目区域)中设置了一个管理区域。我创建了几个控制器及其各自的视图文件夹。在 AreaRegistration.RegisterArea 方法中,我已指定我希望默认控制器为“仪表板”:

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Dashboard", action = "Index", id = "" }, new string[] { "Admin" }
        );
    }

如果我导航到 url/Admin/Dashboard,索引会正常显示。不过,我想要的是允许用户转到 url/Admin/ 并查看相同的内容。但是,当我这样做时,我得到“找不到资源”。

我刚刚开始接触 MVC 2 的 Area 实现,我不认为我在做任何过于复杂的事情......有人遇到过同样的问题吗?我是否需要指定单独的路线,也许在根、非区域级别?

【问题讨论】:

  • 顺便说一句,MapRoute 调用末尾的字符串数组参数是无关的,我尝试在解决问题的无知尝试中添加它,但由于其余部分没有控制器名称冲突该项目的,我认为在这种情况下它是无用的。
  • 还没有。我不得不将项目搁置几天以处理其他优先事项。不过我今晚会再挖一次。在此期间,我只是直接链接到我打算默认的 Area/Controller/Action 路由。
  • @SocialAddict,看看我在下面提供的解决方案。你的情况是相似的还是你只是好奇?
  • 这可行,但随后会导致共享视图出现错误,因为它在根而不是区域中查找,找不到解决此问题的整洁方法,有什么想法吗?
  • MVC4 仍然会发生...我有一个名为 v1 的区域,所以我怀疑“admin”这个名称是否有任何冲突,正如您在自己的答案中推测的那样。

标签: asp.net-mvc routing


【解决方案1】:

尝试添加这条额外的路线:

        context.MapRoute(
            "Admin_default2",
            "Admin"
            new { controller = "Dashboard", action = "Index", id = "" }
        )

【讨论】:

  • 是的,我试过了,不行。我尝试在默认路由之前将它放在 AreaRegistration 类和全局类中。
  • 嗯,我也无法让它在我的项目中工作。稍后我会继续努力。同时,您将需要 Phil Haack 的路线诊断工具:haacked.com/archive/2007/12/17/…
【解决方案2】:

好的,奇怪。所以我添加了一个不同的区域,恰当地命名为“管理”,设置默认控制器并添加适当的控制器、视图等,它就起作用了。区别?在我的第一个案例中,我使用“Admin”作为区域。

【讨论】:

  • 这值得进一步研究,因为我想知道为什么“管理员”会造成麻烦。某处是否存在隐藏的命名冲突?
【解决方案3】:
context.MapRoute(
               "Admin_default3",
               "Admin/{action}",
               new { controller = "Admin", action = "Index" }
               );

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2011-01-19
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2011-02-08
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多