ActionLink가 그렇지 않은 동안 RoutElink가 우호적 인 URL을 생성하는 이유는 무엇입니까?

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

문제

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의 라우팅 디버거 이것을 명확히하는 데 도움이 될 것입니다.

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