2013-05-22 6 views
0

아약스를 사용하여 컨트롤러 메서드를 호출하려고하는데 내부 서버 오류가 발생합니다.MVC 아약스 호출 컨트롤러 메서드

JQuery와는 다음과 같습니다

function user(id) { 
    alert(id+" "+$("#comment").val()); 
    var param = { 
     userId : id, 
     comments : $("#comment").val() 
    }; 

    $.ajax({ 
     url: "/Admin/User", 
     contentType: "application/x-www-form-urlencoded", 
     type: "POST", 
     datatype: "json", 
     data: param, 
     error: function (xmlHttpRequest, errorText, thrownError) { 
      alert(xmlHttpRequest+"|"+errorText+"|"+thrownError); 
     }, 
     success: function (data) { 
      if (data != null) { 
       alert("success"); 
      } 
     } 
    }); 
} 

컨트롤러는 다음과 같습니다

[HttpPost] 
    public ActionResult User(int id, string comment) 
    { 

     var user = UserModel.GetPerson(id); 

     user.IsDeleted = true; 

     UserModel.UpdatePerson(user); 

     return RedirectToAction("ManageUsers"); 
    } 

그것은 코드의 밤은 심지어 컨트롤러에가는 것 같습니다. user(id)의 첫 번째 알림이 실행 중입니다. 아무도 여기서 무슨 일이 일어나는지 보지 않니?

답변

3

조치의 인수

개체 속성

{ 
    userId : id, 
    comments : $("#comment").val() 
} 

대 조치 인수

int id, string comment 

에 대한 있도록 일치하도록 변경 시도와 귀하의 개체 속성 충돌 예 :

public ActionResult User(int userId, string comments) { ... } 

비동기 요청에서 작업으로 리디렉션 할 수 없으니주의하십시오. 그것은 목적을 이겨내는 것입니다. 콜백으로 리디렉션해야합니다.

+0

좋은 캐치! 고맙습니다! – Mike

+0

또는 userId 및 comments props가있는 param으로 C# 클래스를 만드는 경우이 객체를 컨트롤러에 전달할 수 있습니다. –

1

Gabe의 대답에 이어 아약스 요청에서 액션으로 리디렉션 할 수 없다고 생각합니다. 성공 콜백에서 document.location을 리디렉션 할 작업의 url로 설정해야합니다. 현재 리디렉션 액션은 mvc에서 반환하지만 브라우저에서는 반환하지 않습니다.

콜백

success: function (data) { 
    document.location = data.responseText; 
} 

컨트롤러 리턴

return Url.Action("ManageUsers", "Users").ToString(); 
+0

나는 이것을 사실로 생각했다. 나는 위의 변경을 만들었지 만 무단 된 오류가 발생하고 현재 페이지를 새로 고침 – Mike

+0

document.location = data 트릭을 수행했습니다. – Mike

0

이이 질문에 대한 정확한 답변을하지 않고 내가 그 알고 있어요,하지만 발생 그러한 경우가 있었다 나에게 AJAX 호출을 통해 컨트롤러 메소드를 호출하려고 시도했다. 컨트롤러 방법을 확인한 결과, [HttpPost] 뒤에 [AllowAnonymous]을 넣지 않은 것을 알았습니다. 분명히 로그인 한 사용자와 익명 사용자의 경우가 다르기 때문에 내 응용 프로그램에 필요합니다. 이 키워드가 없기 때문에 AJAX가 컨트롤러 메소드를 사용하지 못했을 수도 있습니다. 아마도 같은 일을하고이 답변을 보려고하는 사람이있을 것입니다.

관련 문제