2008-09-28 4 views
5

나는 비슷한 경로를 가진 asp.net MVC 응용 프로그램이 있습니다Asp.Net MVC : 정수 값을 올바르게 렌더링하도록 Html.ActionLink를 얻으려면 어떻게해야합니까?

routes.MapRoute("Blog", 
    "{controller}/{action}/{year}/{month}/{day}/{friendlyName}",       
    new { controller = "Blog", action = "Index", id = "", friendlyName="" }, 
    new { controller = @"[^\.]*", 
      year = @"\d{4}", 
      month = @"\d{2}", 
      day = @"\d{2}" } 
); 

내 컨트롤러 액션 메소드 서명은 다음과 같습니다 내보기에서

public ActionResult Detail(int year, int month, int day, string friendlyName) 
{ // Implementation... } 

는, 내가 좋아하는 뭔가를하고 있어요 :

<%= Html.ActionLink<BlogController>(item => item.Detail(blog.PostedOn.Year, blog.PostedOn.Month, blog.PostedOn.Day, blog.Slug), blog.Title) %> 

ActionLink에서 생성 된 URL이 작동하는 동안 URL 재 작성보다는 쿼리 문자열 변수가 사용됩니다.

예를 들어

, 그것은 생산하는 것/블로그/세부/내-슬러그? 년 = 2008 & 월 = 7 & 일 = 5 대신에/블로그/세부/2008/07/05/내-슬러그

예상 URL이 나오도록 정수 값을 적절하게 채우기 위해 ActionLink의 제네릭 버전을 얻는 방법이 있습니까?

감사

답변

2

내가 년, 월 포맷을 제안하고, 날 대신 문자열과 같은 것입니다. 이것에 대해 생각해보십시오.이 "정수"에 대해 계산을 수행 할 예정입니까? 아마 그렇지 않을 것입니다. 그래서 정수로 만드는 것은 요지가 없습니다. 문자열로 사용하면 앞에 오는 0 형식을 사용할 수 있습니다.

+0

최적의 해결책은 아니지만, 나는 이것이 작동 할 것이라는 것을 알고 있습니다. –

4

매개 변수가 정수라는 사실은 사용자의 문제와 아무 관련이 없습니다. 사용하려는 경로 정의가 실제로 사용되지 않아 생성 된 URL이 원하는 구조를 작성하는 대신 쿼리 문자열 매개 변수를 사용하는 이유입니다.

경로는 하향식으로 평가되므로 요청한 URL 생성을 충족시키는보다 일반적인 경로 정의가있을 가능성이 큽니다. 이 게시물에 표시된 경로를 경로 정의 상단으로 이동하면 생성 된 링크가 예상대로 표시됩니다. 그런 다음 경로 정의를 수정하여보다 구체적인 경로를 찾거나 필요에 따라 경로를 정의하십시오.

이러한 유형의 시나리오를 디버깅하는 것은 큰 어려움이 될 수 있습니다. 나는 Phil Haack의 route debugger을 다운로드하는 것이 좋습니다. 그것은 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다.

+0

루트는 unforutnately입니다. 디버거를 살펴 보겠습니다. –