2012-04-03 2 views
12

이전에 게시 된 jQuery/MVC 질문을 살펴본 결과 가능한 대답을 찾지 못했습니다.Ajax 호출 MVC 컨트롤러 - URL 문제

나는 다음과 같은 자바 스크립트 코드를 가지고 :

$.ajax({ 
type: "POST", 
url: '@Url.Action("Search","Controller")', 
data: "{queryString:'" + searchVal + "'}", 
contentType: "application/json; charset=utf-8", 
dataType: "html", 
success: function (data) { 
alert("here" + data.d.toString()); 
} 
}); 

URL을 호출 포스트는 다음과 같습니다

NetworkError: 500 Internal Server Error - <a href="http://localhost/Web/Navigation/@Url.Action(%22Search%22,%22Chat%22)"></a> 

나에게 설명해주십시오 누군가가 왜 (이 같은 논리를 반환 않습니다 수 그 뒤에) 올바른 솔루션을 제공합니다. 미리 감사드립니다!
PS : 추가 정보 : 22 %는 자바 스크립트가 면도기보기 내에 배치되어야한다는 일이 위해서는 < < ">> 문자

+0

자바가 외부 JS 파일에 있습니까? 또는 cshtml 파일에서? –

+0

나는 당신이 @Url을 가지고 있다고 믿습니다.작은 따옴표 안의 액션 ("Search", "Controller")은 JS가 라우팅 시스템에서 URL을 해석하는 것이 아니라 문자열을 처리하도록 강요합니다. – dougajmcdonald

+0

chtml에서 호출되었지만 외부 파일에 기록됩니다. –

답변

41

의 URL 인코딩 참조 그래서 라인이

@Url.Action("Action","Controller") 

는 면도기에 의해 구문 분석과 실제 값을 대체했다.

당신이 당신의 자바 스크립트 파일에서 것을 참조 다음 설정이보기에 객체를 생성하고 볼 수 있었다 당신의보기로 자바 스크립트를 이동하지 않으려면.

예 :

var MyAppUrlSettings = { 
    MyUsefulUrl : '@Url.Action("Action","Controller")' 
} 

과의 .js에서 JS 코드로 뷰를 "오염"없이 동일한 달성하기 위해 허용 HtmlHelpers 내에서 프레임 워크의 builtAjax의 메소드를 움직이기 보면 양자 택일

$.ajax({ 
type: "POST", 
url: MyAppUrlSettings.MyUsefulUrl, 
data: "{queryString:'" + searchVal + "'}", 
contentType: "application/json; charset=utf-8", 
dataType: "html", 
success: function (data) { 
alert("here" + data.d.toString()); 
}); 

파일 또는

.

+0

Ok. 나는이 질문으로 부랑자에게 고통 스러울 수 있습니다. 제공 한 코드가 포함 된보기 파일이 있습니다 (). <스크립트 유형 = "텍스트/자바 스크립트"SRC = "@의 Url.Content ("~/스크립트/jquery.treeview.js ")"> –

+0

이 –

+0

당신 선생님 위의 내 편집을 참조하십시오 : 어떻게 외부 자바 스크립트에 있음을 참조 할 수 있습니다 ... 굉장한 데! 당신의 도움을 주셔서 감사합니다 ! –

8

코드 예에는 유형 오류가 있습니다. success

$.ajax({ 
type: "POST", 
url: '@Url.Action("Search","Controller")', 
data: "{queryString:'" + searchVal + "'}", 
contentType: "application/json; charset=utf-8", 
dataType: "html", 
success: function (data) { 
    alert("here" + data.d.toString()); 
} 
}) 

다음에 curlybracket을 잊어 버린 것입니다. Rob's 대답부터 시작

+1

나는 currybracket을 가지고 있지만 그것에 도달하지는 못한다. 문제가 Url.Action 호출 내에 있습니다. –

3

, 나는 현재 문제가 많은 관심을받은 다음 syntax.Since를 사용하고, 내가 당신과 함께 공유하기로 결정

var requrl = '@Url.Action("Action", "Controller", null, Request.Url.Scheme, null)'; 
    $.ajax({ 
    type: "POST", 
    url: requrl, 
    data: "{queryString:'" + searchVal + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "html", 
    success: function (data) { 
    alert("here" + data.d.toString()); 
    } 
    }); 
6

좋은 방법은 그것을 할받지 않고 관련보기가 될 수 있습니다

":이 URL에 게시하려고합니다

$.ajax({ 
    type: "POST", 
    url: '/Controller/Search', 
    data: { queryString: searchVal }, 
    success: function (data) { 
     alert("here" + data.d.toString()); 
    } 
}); 

(사용하려는 동작의 올바른 URL) "

+0

'컨트롤러'앞에 슬래시가 표시되지 않습니다. 잘못된 URL이 생성됩니다. byut 예, 이것은 내가 지금 사용하는 것입니다. –

+0

URL에 서버 측 로직이 필요하지 않다면, 이것은 더 깨끗합니다. 또한 MVC는 json의 모양이 C# 객체의 모양과 일치하는 한 데이터 속성의 문자열이 지정된 json을 acton의 매개 변수로 캐스팅합니다. – Paul

0

mihai-labo's 답변부터 시작하여 answer.py? answer를 건너 뛰고 URL 생성 코드를"url : " :

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Action", "Controller", null, Request.Url.Scheme, null)', 
    data: "{queryString:'" + searchVal + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "html", 
    success: function (data) { 
     alert("here" + data.d.toString()); 
    } 
});