2014-07-07 3 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, когда я пытаюсь его.

// ---- EDIT ---- //

Я могу отправить данные, если я инкапсулировать его в 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

Что произойдет, если вы передадите файлList напрямую, не обернув его в postData? $ .post (url, $ .param (fileList, true)); – swestfall

+0

Попробуйте указать «традиционный» для коллекции «* мелкой». Просто '$ .param (postData)'. –

+0

нет ... еще ничего на другой стороне. – AntoineLev

ответ

0

На самом деле моя проблема была не с ajax, но это был тот факт, что мой веб-интерфейс вызывал мои 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, если ни по какой другой причине, чем просто уведомить пользователя, когда процесс завершается должным образом.

EDIT

К сожалению, я действительно не думал об этом, но вы не должны использовать $.param вообще в этом сценарии. Просто передайте полный объект $.post.

+0

все еще ничего. Вы можете увидеть мое редактирование – AntoineLev

+0

Я попробовал отредактированную вещь перед тем, как отправить вопрос. – AntoineLev

+0

В моем редактировании я не думал об этом до того, как ответить и разобраться. Вы вообще не должны использовать '$ .param' * *. Нет причин. Вы пробовали просто передать весь объект, как указывает мой исправленный ответ? –

Смежные вопросы