代码之家  ›  专栏  ›  技术社区  ›  Grahame A

ASP.NETMVC路由,需要帮助创建路由吗

  •  0
  • Grahame A  · 技术社区  · 14 年前

    我当前的路由规则是

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
    
    routes.MapRoute(
        "Admin", // Route name
        "Admin/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Admin", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
    

    /Admin/Index
    

    它列出了一堆动作链接。现在单击这些链接中的任何一个重定向,如以下示例所示:

    /News/Index
    

    但我需要这样:

    /Admin/News/Index
    

    我已经搜索了StackOverflow的答案,并找到了一些接近的-但我仍然不了解如何充分利用他们的答案。感谢您的帮助。

    编辑

    <div id="menucontainer">
    
                    <ul id="menu">              
                        <li><%: Html.ActionLink(" ", "About", "Home", null, new { ID = "AboutMHN" })%></li>
                        <li><%: Html.ActionLink(" ", "Products", "Home", null,  new { ID = "Products" })%></li>
                        <li><%: Html.ActionLink(" ", "HubLocator", "Home", null, new { ID = "HubLocator" })%></li>
                        <li><%: Html.ActionLink(" ", "ResellerProgram", "Home", null, new { ID = "ResellerProgram" })%></li>
                        <li><%: Html.ActionLink(" ", "ResellerLogin", "Home",  null, new { ID = "ResellerLogin" })%></li>
                        <li><%: Html.ActionLink(" ", "ContactUs", "Home", null, new { ID = "ContactUs" })%></li>
                    </ul>                 
    
                </div>
    

    另外,我的管理控制器只有一个索引操作。我有用于所有其他“管理”页面的控制器,例如,我的NewsController有用于索引、创建、编辑、删除、列出所有新闻文章和执行crud操作的操作。我的结构是否有误?

    我的管理员控制器.cs

     [Authorize(Roles = "Administrator")]
        public class AdminController : Controller
        {
            //
            // GET: /Admin/
    
            public ActionResult Index()
            {
                return View();
            }
    
    
        }
    

    这个返回的Admin/索引包含一个带有ActionLinks的菜单,就像

    <li><%: Html.ActionLink("News Articles", "Index", "News") %></li>
    

    Admin/News/Edit/5
    

    而不是

    News/Edit/5
    
    3 回复  |  直到 11 年前
        1
  •  0
  •   Martin    14 年前

    翻转两个:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    routes.MapRoute(
        "Admin", // Route name
        "Admin/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Admin", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
    
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
    

    如果这不起作用,请将新闻菜单链接的代码添加到您的问题中。

        2
  •  0
  •   Sayed Ibrahim Hashimi    14 年前

    映射是从上到下的,将使用可以应用的第一条路径。在你的情况下,你有默认的管理路线。因为可以使用默认值,所以应该将管理路由置于默认值之上。问题是所有人都会使用这条路线。您需要更具体一点,也许您应该删除{controller},这样只有管理操作才会使用该路由。需要更多的信息来提供更好的建议。

        3
  •  0
  •   Grahame A    14 年前

    请参见: http://elegantcode.com/2010/03/13/asp-net-mvc-2-areas/

    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }
    
        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { controller= "Menu", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

    我必须添加controller=“Menu”,这样当您导航到/Admin时,默认情况下会转到/Admin/Menu/Index。现在我在area文件夹中的任何控制器都可以访问,比如/Admin/News/Edit/5等等。感谢你的尝试,我应该更清楚我是一个绝对的MVC noob,不知道该从哪里开始。