문제

저는 MVC Land를 처음 접했고 작업 중인 앱이 있습니다.내 글로벌에는 상당히 유사한 2개의 경로가 있는 2개의 다른 링크가 있습니다.

경로 1

routes.MapRoute("Category", "Movies/{category}/{subcategory}", 
    new { controller = "Catalog", action = "Index", category = "", subcategory = "" });

경로 2

routes.MapRoute("Movie", "Movie/{movie}", 
    new { controller = "Movie", action = "Index", movie = "" });

첫 번째 경로에 대한 작업링크를 호출하면 다음과 같이 생성됩니다.

.../Movies/Category/SubCategory

그러나 두 번째 링크를 만들면 다음과 같이 채워집니다.

.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a

이전에는 GUID 대신 문자열을 사용하고 있었는데 여전히 동일한 작업을 수행하고 있었습니다.

.../Movie?movieName=Snatch

내 작업링크는 다음과 같이 설정되어 있습니다

<%= Html.ActionLink(parent.Name, "Index", "Catalog",
    new { category = parent.Name, subCategory = "" }, null)%>

<%= Html.ActionLink(movie.Name, "Index", "Movie", 
    new { movieId = movie.MovieId }, null)%>

내 앱은 여전히 ​​작동하지만 이 동작이 이상하다고 생각했습니다.어떤 도움이라도 좋을 것입니다.

감사해요!

도움이 되었습니까?

해결책

routes.MapRoute("Movie", "Movie/{movieId}", 
    new { controller = "Movie", action = "Index", movie = "" });

경로 텍스트가 mvc 링크에 제출하는 속성의 이름과 일치하지 않아야 합니까?

다른 팁

문제는 ActionLink를 호출할 때 라우팅 시스템이 두 경로 중 어떤 경로를 사용할지 파악할 수 없어 첫 번째 경로를 선택한다는 것입니다.해결책은 ActionLink 대신 RouteLink를 사용하는 것입니다.RouteLink를 사용하면 URI를 생성할 때 사용할 경로 이름을 지정할 수 있습니다.그러면 어떤 경로를 사용할지에 대한 모호함이 없습니다.ActionLink는 더 이상 사용되지 않는 것 같습니다.RouteLink 대신에 이를 사용할 이유가 없다고 생각됩니다.

그러나 사용자가 링크를 제출할 때 여전히 문제가 있을 수 있습니다.이 경우 경로 제약 조건을 사용하여 올바른 경로를 선택하도록 하세요.

Andrew는 ActionLink/RouteLink에서 사용하는 토큰과 경로 자체가 일치해야 한다는 것이 정확합니다(찬성).

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