這一個一直扔我,所以我想我會尋求一些幫助。我有這個與我的「類別」路線一起工作,但由於某種原因,當我試圖對「消費者」做同樣的事情時,它根本無法工作。這是必要的背景信息:ASP.NET MVC 3路由在/管理區域名稱而不是id
路由(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看看它是否提供任何提示http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – lomaxx
是的,我知道這個util - 和鏈接,實際上,應該是對V2 - http://haacked.com/archive/2011/04/13/routedebugger-2.aspx – jamauss