ActionLink가 그렇지 않은 동안 RoutElink가 우호적 인 URL을 생성하는 이유는 무엇입니까?
-
20-09-2019 - |
문제
RouteLink 대 ActionLink에 관한 질문이 있습니다.
다음 경로를 고려하십시오
routes.MapRoute("Routename1",
"{someEnum}/SpecificAction/{id}/{stringId}",
new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
new { someEnum= "(EnumVal1|EnumVal2)" }
);
이상한 {someenum} 부분은 URL의 일반적인 컨트롤러 부분을 형성하는 열거의 모든 값에 일반 컨트롤러를 사용하기 때문입니다. 예를 들어,/enumval1/action/및/enumval2/action/동일한 컨트롤러를 사용하십시오. 그러나 그것은 문제의 일부가 아닙니다.
다음 두 가지 연결 방법을 고려하십시오.
<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%>
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>
RoutElink는 올바른 URL을 생성하며/enumval1/sectionaction/32/yatzy입니다.
ActionLink는/enumval1/Secultaction/32? stringid = yatzy와 같은 URL을 생성합니다.
왜 이런거야? 누군가 나에게 이것을 설명해 주시겠습니까?
해결책
RouteLink
지정한 하나의 경로 만 사용할 수 있습니다. ActionLink
의도 한 것이든 아니든 첫 번째 매칭 경로를 사용합니다. 두 가지 예는 아마도 다른 경로와 일치 할 것입니다.
Phil Haack의 라우팅 디버거 이것을 명확히하는 데 도움이 될 것입니다.
제휴하지 않습니다 StackOverflow