【发布时间】:2010-08-19 19:03:32
【问题描述】:
我当前的路由规则是
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
这种当前的设置很有效,但是我主页上的链接被错误的规则捕获,例如 /Admin/Article/1 当它们应该只是 /Article/1
我在 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 操作的操作。我的结构不正确吗?
我的 AdminController.cs
[Authorize(Roles = "Administrator")]
public class AdminController : Controller
{
//
// GET: /Admin/
public ActionResult Index()
{
return View();
}
}
返回的 Admin/Index 包含一个带有 ActionLinks 的菜单,就像
<li><%: Html.ActionLink("News Articles", "Index", "News") %></li>
我的 NewsController.cs 具有执行 CRUD 操作的操作。我希望网址是
Admin/News/Edit/5
代替
News/Edit/5
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-routing