2012-05-01 3 views
3

"Index"라는 뷰가 있습니다. 이 페이지의 검색 창은 그리고 당신 제출을 클릭하면, 내가 자바 스크립트 리디렉션이 있습니다Url.Action이 실제 URL을 제공하지 않음

면도기보기에서
var alerted='@url'; 
var url=alerted + "/" + $("#SearchText").val(); 

, urlvar url = Url.Action("Index", "Search");

그러나 자바 스크립트에 정의 된 변수,/"출력을 경고 ". 나는 이것이 왜 있는지 전혀 모른다. 다른 컨트롤러보기로 변경하면 괜찮습니다. 인덱스에서 인덱스를 호출하면 아무 것도주지 못합니다. 뭐라 구요? 내가 가고있는 페이지에 대한 URL을 제공해야합니다.

+0

이전에도이 문제가있었습니다. 그것은 인덱스와 같은 컨트롤러에서 나오는 액션의 관습과 관련이 있습니다. 인덱스의 이름을 다른 것으로 변경하고 시도하십시오 –

답변

5

상대 URL을 사용하고 있습니다. 기본 컨트롤러의 색인 작업의 상대 URL은 "/"입니다. 절대 URL이 필요한 경우

Url.Action("Index", "Search", null, Request.Url.Scheme) 

을 사용해보십시오. 기본값은 아무 것도 제공하지 않은 경우 라우팅이 사용하는 컨트롤러/액션입니다

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

:

은 gloabal.asax에서 당신은 아마도처럼 보이는 라우팅 방식이있다. 마지막 매개 변수에서 컨트롤러 및 조치 속성을 제거한 경우 색인 및 검색은 기본 조치 및 제어기가 중지됩니다. 지금

@Url.Action("Index", "Search") 

"/ 검색"은 더 이상 유효한 URL이 아니기 때문에 "Search/Index"가됩니다. 실제로이 작업을 권장하지는 않지만 상황을 이해하기 위해서는 알아두면 유용합니다.

경우 기본 경로를하기 전에 그들이 먼저 라우팅을 때렸어 때문에 다음 Url.Action("Search","Index")의 모든 호출이 URL에 "/ 검색/색인"을 얻을 것이다

routes.MapRoute(
       "Index", // Route name 
       "Search/Index/{id}", // URL with parameters 
       new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults); 

을 추가했다. 그러나 브라우저에 직접 입력 한 경우 작업 또는 컨트롤러를 입력하지 않아도 인덱스 페이지로 이동하게됩니다.

+0

그 상대 URL 문제를 지나면 얻을 줄 몰랐습니다! 감사합니다! 나는 그것을 극복하기 위해 내 색인 작업의 이름을 바꾼 것이다. –

+0

검색/색인도 내 global.asax의 기본 URL이므로 내 로컬에서는 url이'http : // localhost : 16721 /'로 나타납니다. global.asax에서 내 기본 주소로 사용하면서'http : // localhost : 16721/Search/Index /'로 표시하려면 어떻게해야합니까? –

+0

"/"로 해석되는 이유는 기본 컨트롤러 및 동작이 일치한다는 사실입니다. 즉 "/"는 "/ Search/Index"와 같습니다. 기본 프로젝트가 "/ home/index"와 같은 이유입니다. –

관련 문제