2015-03-04 7 views
5

W żądaniu AJAX do serwera w MVC, w jaki sposób mogę przekazać listę identyfikatorów do funkcji działania kontrolera?Jak przekazać listę identyfikatorów w żądaniu AJAX do serwera w MVC

Akceptuję z pomocą lub bez pomocy pomocy Html.

znam modelu spoiwo MVC nie ma żadnego problemu, jeśli chodzi o typy proste jak int, string i bool.

Czy jest coś takiego, że muszę używać i ustawiać w akcji?

I nie obchodzi mnie, czy muszę użyć array lub List i nawet jeśli strun ja int lub strings zawsze mogę je przeliczyć. Potrzebuję ich tylko na serwerze. Moja lista ids jest obecnie pusta.

Javascript:

var ids= [1,4,5]; 
// ajax request with ids.. 

MVC Działanie:

public ActionResult ShowComputerPackageBuffer(List<int> ids) // ids are null 
{ 
    // build model ect.. 
    return PartialView(model); 
} 

EDIT: Dodano moja prośba AJAX

$(document).ready(function() { 
    $('#spanComputerPackagesBuffer').on('click', function() { 
     var ids = $('#divComputerPackagesBuffer').data('buffer'); 
     console.log('bufferIds: ' + bufferIds); 
     var data = { 
      ids: ids 
     }; 

     var url = getUrlShowComputerPackageBuffer(); 
     loadTable(url, "result", data); 
    }); 
}); 

// AJAX's 
function loadTable(url, updateTargetId, data) { 
    var promise = $.ajax({ 
     url: url, 
     dataType: "html", 
     data: data 
    }) 
    .done(function (result) { 
     $('#' + updateTargetId).html(result); 
    }) 
    .fail(function (jqXhr, textStatus, errorThrown) { 
     var errMsg = textStatus.toUpperCase() + ": " + errorThrown + '. Could not load HTML.'; 
     alert(errMsg); 
    }); 
}; 

// URL's 
function getUrlShowComputerPackageBuffer() { 
    return '@Url.Action("ShowComputerPackageBuffer", "Buffer")'; 
}; 

ROZWIĄZANIA: // Dzięki @aherrick komentarz. Brakowało mi stare dobre "tradycyjne"

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("ShowComputerPackageBuffer", "Buffer")', 
    dataType: "json", 
    traditional: true, 
    data: { 
     bufferIds: bufferIds 
    } 
}); 
+0

Czy możesz pokazać, w jaki sposób robisz swoje żądanie AJAX? –

+0

@OmriAharon pewnie jedna chwila – radbyx

+1

Użyj parametru "tradycyjny". http://stackoverflow.com/questions/4402036/jquery-ajax-posting-array-to-asp-net-mvc-controller – aherrick

Odpowiedz

10

użyć parametru traditional i ustawić ją na true.

$.ajax({ 
    type: "POST", 
    url: "/URL", 
    dataType: "json", 
    traditional: true, 
    data: {} 
}); 
2

Spróbuj tego (mam sprawdzone IT):

$(function() { 
     var ids = [1, 4, 5]; 
     $.ajax({ 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      url: '@Url.Action("YourAction", "YourController")', 
      data: JSON.stringify({ ids: ids }) 
     }).done(function() { 

     }); 
    }); 

Musisz upewnić się, że jest application/jsoncontentType i dane są stringified.

+0

Próbowałem go, a identyfikatory buforów (lub identyfikatory) wciąż są puste na serwerze. Jak wygląda twój znak działania? – radbyx

0
public ActionResult SaveSomething(int[] requestData) 
//or 
public ActionResult SaveSomething(IEnumerable<int> requestData) 

Korzystanie Działanie Rezultat nie można odbierać obiekt JSON:

Korzystanie Controler: skrypt

[HttpPost] 
    [Route("api/Controller/SaveSomething")] 
    public object SaveTimeSheet(int[] requestData) 
    { 
     try 
     { 
      doSomethingWith(requestData); 

      return new 
      { 
       status = "Ok", 
       message = "Updated!" 
      }; 
     } 
     catch(Exception ex) 
     { 
      return new 
      { 
       status = "Error", 
       message = ex.Message 
      }; 
     } 


} 

Java:

var ids = [1,4,5]; 
var baseUrl: 'localhost/yourwebsite' 
$.ajax({ 
        url: baseUrl + '/api/Controller/SaveSomething', 
        type: 'POST', 
        data: JSON.stringify(ids), 
        dataType: 'json', 
        contentType: 'application/json', 
        error: function (xhr) { 
         alert('Error: ' + xhr.statusText); 
        }, 
        success: function (result) { 
         if (result != undefined) { 
          window.location.href = window.location.href; 
         } 
        }, 
        async: false, 
       }); 
+0

Dlaczego w tym przypadku użyłeś async: false? – MDDDC

+0

Bez powodu, aby odblokować stronę do czasu otrzymania odpowiedzi, żądania synchroniczne mogą tymczasowo zablokować przeglądarkę. – SilentTremor

Powiązane problemy