bestsource

MVC 컨트롤러에 대한 Ajax 호출 - URL 문제

bestsource 2023. 8. 22. 22:17
반응형

MVC 컨트롤러에 대한 Ajax 호출 - URL 문제

이전에 게시된 jQuery/MVC 질문을 살펴보았지만 실행 가능한 답변을 찾지 못했습니다.

다음과 같은 JavaScript 코드가 있습니다.

$.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> 

왜 이렇게(뒤에 있는 논리) 돌려주고 해결책은 무엇입니까?

추신: 추가 정보: %22는 <<>> 문자의 URL 인코딩 참조입니다.

이것이 작동하기 위해서는 JavaScript가 레이저 뷰 내에 배치되어 라인이

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

Razor에 의해 구문 분석되고 실제 값이 대체됩니다.

보기로 JavaScript를 이동하지 않으려면 보기에서 설정 개체를 만든 다음 JavaScript 파일에서 해당 개체를 참조할 수 있습니다.

예.

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

및 .js 파일:

$.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());
    }
});

또는 HtmlHelper 내에서 프레임워크에 내장된 Ajax 메서드를 활용하여 JS 코드로 보기를 "오염"하지 않고도 동일한 작업을 수행할 수 있습니다.

코드 예제에 유형 오류가 있습니다.당신은 곱슬머리를 잊어버립니다.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());
 }
})

;

뷰를 포함하지 않고 이를 수행하는 좋은 방법은 다음과 같습니다.

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

다음 URL에 POST를 시도합니다.

"http://domain/Controller/Search(사용할 작업의 올바른 URL)"

Rob의 답변을 시작으로, 저는 현재 다음과 같은 구문을 사용하고 있습니다.그 질문이 많은 관심을 받았기 때문에, 저는 당신에게 그것을 공유하기로 결정했습니다.

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());
   }
  });

mihai-labo의 답변에서 시작하여, requrl 변수를 선언하는 것을 건너뛰고 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());
    }
});

URL에 액세스하는 간단한 방법이 코드 사용

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

언급URL : https://stackoverflow.com/questions/9988634/ajax-call-into-mvc-controller-url-issue

반응형