1

这一个一直扔我,所以我想我会寻求一些帮助。我有这个与我的“类别”路线一起工作,但由于某种原因,当我试图对“消费者”做同样的事情时,它根本无法工作。这是必要的背景信息: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.Aliasid = c.Alias,它会生成如下URL: /Admin/Consumers/details/JoeBob(因此它将查询字符串中的别名部分删除,但仍将“详细信息”放在别名之前)。

任何想法?

编辑:重新启动IIS解决了我的问题。不知道为什么,但确实如此。

+0

我不知道是什么具体导致了这个问题,但我强烈建议看看routedebugger看看它是否提供任何提示http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – lomaxx

+0

是的,我知道这个util - 和链接,实际上,应该是对V2 - http://haacked.com/archive/2011/04/13/routedebugger-2.aspx – jamauss

回答

1

您的路线配置正确(我测试了它们)。我怀疑你是因为含有你的@ Html.ActionLink()标记的视图在你的管理区之外而得到这种不当行为。如果它在您的管理区域内,您应该看到生成的正确链接。但是,在您的管理区域之外,您需要声明您的目标是这样的:

@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias, area = "Admin" }, null) 
+0

实际上,@ Html.ActionLink调用**在我的管理区域内。奇怪的是,我接到了服务器并重新启动了IIS,现在正在生成正确的URL结构,但现在MVC正在尝试使用消费者的名称而不是“详细信息”视图查看View,尽管我在我的路线中指定了Controller和Action名称。 : - \ – jamauss

+0

没关系 - 想出了那部分。我将别名传递给View函数(留下了一些测试代码),所以它就像返回View(别名)一样。我删除了“别名”部分,所以它只是返回View(),一切都很好。 – jamauss

+0

这很奇怪。我在一个全新的MVC3项目中测试了你的代码,它适用于我,所以我不认为你的代码有什么问题。祝你好运,解决这个问题。 –