2014-07-07 2 views
0

$.post() 및 내 mvc 컨트롤러에 문제가 있습니다.Jquery Ajax 및 asp.net mvc 컨트롤러

나는이 같은 웹 및 스택 오버 플로우에 몇 가지 예를 시도 :

하지만 성공하지 How can I post an array of string to ASP.NET MVC Controller without a form?. 난 그저 내 컨트롤러에 문자열의 배열을 전달하려는 :

[HttpPost] 
     public HttpResponseMessage Post([FromBody]List<string> idList, string request, bool auto) 
     { 
      LogHelper.Log(Severity.Info, "Just entered in POST api/files"); 

      var fileList = new List<string>(); 

      switch (request) 
      { 
       case "Activate": 
        fileList = auto ? _bendingsServies.GetBendigsToCome() : idList; 
        _filesServices.Activate(fileList); 
        break; 
       case "Archive": 
        fileList = auto ? _filesServices.GetFilesToArchive() : idList; 
        _filesServices.Archive(fileList); 
        break; 
       default: 
        return ControllerContext.Request.CreateResponse(HttpStatusCode.BadRequest); 
        break; 
      } 
      return ControllerContext.Request.CreateResponse(HttpStatusCode.OK); 
     } 

내 JQuery와 : 나는 그것을하려고 할 때 시도 모든 것을

@using System.Configuration 
var api_url = "@ConfigurationManager.AppSettings["apiUrl"]"; 
$(document).ready(function() { 
    // ---- Ajax calls ---- // 
    $("#archivebutton").click(function() { 
     var url = api_url + "Files?request=Archive&auto=false"; 
     var fileList = ["10", "14", "12"]; 
     var postData = { idList: fileList } 
     $.post(url, $.param(postData,true)); 
    }); 
}); 

idList는 항상 0 요소가 포함되어 있습니다.

// ---- 편집 ---- // 내가 JSON 개체에 캡슐화하는 경우 데이터를 보낼 수 있어요

:

$("#activatebutton").click(function() { 
       var url = api_url + "Files?request=Activate&auto=false"; 
       var fileList = ["this", "is", "a", "test"]; 
       $.post(url, { fileList: fileList}); 
      }); 

이 요청입니다 : enter image description here

+0

fileList를 postData로 래핑하지 않고 직접 전달하면 어떻게됩니까? $. post (url, $ .param (fileList, true)); – swestfall

+0

"* shallow *"컬렉션에'traditional'을 지정하지 않고 시도하십시오. 단지'$ .param (postData)'. –

+0

싫어 ... 아직 다른쪽에 아무것도. – AntoineLev

답변

0

사실 내 문제는 아약스가 아니었지만 사실 내 웹 인터페이스가 다른 도메인에있는 API를 호출하는 것이 었습니다. 디버깅 할 때

당신은 브라우저의 콘솔에서이 줄을보고 싶지 :

GET http://localhost:49375/a5771720d9814c7faa43fd65fd3aa34d/arterySignalR/negot…9399%2FFile%2FManage&browserName=Chrome&clientProtocol=1.3&_=1404748489560 net::ERR_CONNECTION_REFUSED 

이 크로스 도메인 요청을 사용하는 방법이다 : 당신이 도움을 모두에게 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

감사합니다!

0

모델 바디터가 그 일을 할 때 아무것도 일치하지 않는 문자열을 보내면 전체 개체 주위에 $.param을 래핑했습니다. 당신은 한 적이해야합니다

var postData = { idList: fileList }; 
$.post(url, postData); 

는 또한 경우 프로세스가 제대로 완료되면 바로 사용자에게 통지하는 것보다 다른 이유 $.post에 콜백을 추가해야합니다.

편집

미안 해요, 난 정말 그것에 대해 생각하지 않았습니다, 그러나 당신은이 모든 시나리오에서 $.param을 사용할 수 없습니다. 전체 개체를 $.post으로 전달하십시오.

+0

아직 없습니다. 내 편집 – AntoineLev

+0

을 볼 수 있습니다. 질문을 게시하기 전에 편집 된 것을 시도했습니다. – AntoineLev

+0

편집 할 때마다 나는 대답하기 전에 모든 것을 생각하지 않았습니다. '$ .param' *을 전혀 사용하지 말아야한다. 이유가 없습니다. 내 수정 된 답변을 나타내는대로 단순히 전체 개체를 제출하려고 했습니까? –