ASP.NET MVC : 정수 값을 올바르게 렌더링하기 위해 HTML.ActionLink를 얻으려면 어떻게해야합니까?
-
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을 다운로드하는 것이 좋습니다 경로 디버거, 그것은 당신의 삶을 훨씬 쉽게 만들 것입니다.