1

이 하나가 나를 던져서 내가 도움을 요청할 것이라고 생각했습니다. 내 "카테고리"경로로 작업 할 수있게되었지만, "소비자"와 같은 일을하려고 할 때 어떤 이유로 작동하지 않습니다.ID 대신 이름이있는/Admin 영역의 ASP.NET MVC 3 라우팅

라우팅 (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 내 호출이 생성된다는 것이다 이다 (클릭하면, 404 결과)

/Admin/Consumers/details?alias=JoeBob 오히려 내가 원하는 것보다, : 같은 링크 내가 alias = c.Aliasid = c.Alias로 변경하면 내가 눈치 챘을

/Admin/Consumers/JoeBob/details 

한 가지입니다, /Admin/Consumers/details/JoeBob (따라서 쿼리 문자열에서 별칭 부분을 제거하지만 여전히 별칭 앞에 'details'을 넣습니다.)

아이디어가 있으십니까?

: 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가 "세부 정보"뷰가 아닌 "Consumer"라는 이름의 뷰를 찾는 중입니다. 내 경로에 Controller 및 Action 이름을 모두 지정했습니다. - \ – jamauss

+0

Nevermind - 그 부분을 알아 내었습니다. 별칭을 View 함수 (일부 테스트 코드를 남겼습니다)에 전달하여 반환보기 (별칭)와 같았습니다. "별칭"부분을 제거하여 View() 만 반환하고 모두 잘되었습니다. – jamauss

+0

그건 아주 이상합니다. 나는 새로운 MVC3 프로젝트에서 코드를 테스트 했으므로이 코드는 나에게 효과적이므로 코드에 문제가 있다고 생각하지 않는다. 이것을 해결하는 행운을 비네. –