【发布时间】:2011-09-05 03:43:04
【问题描述】:
这个人一直在扔我,所以我想我会寻求帮助。我已经让它与我的“类别”路线一起使用,但由于某种原因,当我试图对“消费者”做同样的事情时,它根本不起作用。以下是必要的背景信息:
路由(AdminAreaRegistration.cs):
public override void RegisterArea(AreaRegistrationContext context)
{
//matches /Admin/BusinessCategories/MyCategory/children
context.MapRoute(
"ChildCategories",
"Admin/BusinessCategories/{category}/children",
new { controller = "BusinessCategories", action = "ViewChildren" }
);
//matches /Admin/BusinessCategories/MyCategory/edit
context.MapRoute(
"EditCategory",
"Admin/BusinessCategories/{category}/edit",
new { controller = "BusinessCategories", action = "Edit" }
);
// want this to match /Admin/Consumers/JoeBob/details
context.MapRoute(
"ConsumerDetails",
"Admin/Consumers/{alias}/details",
new { controller = "Consumers", action = "Details" }
);
//matches /Admin
//matches /Admin/BusinessCategories
//matches /Admin/BusinessCategories/New
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional },
new { id = @"\d+" }
);
}
然后在我的消费者控制器(ConsumersController.cs)中:
public class ConsumersController : Controller
{
public ActionResult Index()
{
...code...
}
[HttpGet]
public ActionResult Details(string alias)
{
return View(alias);
}
}
然后我像这样生成我的链接:
@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias }, null)
问题是我对@Html.ActionLink 的调用正在生成如下链接:
/Admin/Consumers/details?alias=JoeBob(如果单击,则会导致 404)
而不是我想要的,那就是:
/Admin/Consumers/JoeBob/details
我注意到的一件事是,如果我将 alias = c.Alias 更改为 id = c.Alias,它会生成如下 URL:
/Admin/Consumers/details/JoeBob(因此它从查询字符串中删除了别名部分,但仍将“详细信息”放在别名之前。)
有什么想法吗?
编辑:重新启动 IIS 为我解决了这个问题。不知道为什么,但确实如此。
【问题讨论】:
-
我不知道具体是什么导致了这个问题,但我强烈建议你看看 routedebugger 看看它是否提供任何提示haacked.com/archive/2008/03/13/url-routing-debugger.aspx
-
是的,我知道那个实用程序 - 实际上,链接应该是 v2 - haacked.com/archive/2011/04/13/routedebugger-2.aspx
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-areas