ASP.NET MVC : 정수 값을 올바르게 렌더링하기 위해 HTML.ActionLink를 얻으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/146367

  •  02-07-2019
  •  | 
  •  

문제

다음과 유사한 경로가있는 ASP.NET MVC 응용 프로그램이 있습니다.

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 재 작성 대신 쿼리 문자열 변수를 사용합니다.

예를 들어, 그것은/블로그/세부 사항/my-slug? 년 = 2008 & month = 7 & day = 5 대신/blog/detail/2008/07/05/my-slug를 제작합니다.

URL이 예상대로 나오도록 정수 값을 올바르게 채우도록 일반 버전의 ActionLink를 가져 오는 방법이 있습니까?

감사

도움이 되었습니까?

해결책

나는 연도, 월 및 일을 대신 현으로 서식하는 것을 제안합니다. 이것에 대해 생각하십시오 :이 "정수"에 대한 수학을 할 것인가? 아마도 그렇지 않을 것입니다. 일단 문자열로 있으면 선행 제로 형식을 강요 할 수 있습니다.

다른 팁

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

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

이러한 유형의 시나리오를 디버깅하는 것은 큰 고통 일 수 있습니다. Phil Haack을 다운로드하는 것이 좋습니다 경로 디버거, 그것은 당신의 삶을 훨씬 쉽게 만들 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top