wake-up-neo.net

So übergeben Sie eine Liste mit IDs in einem AJAX Anforderung an den Server in MVC

Wie kann ich in einer AJAX -Anforderung an den Server in MVC eine Liste von IDs an die Aktionsfunktion des Controllers übergeben? 

Ich akzeptiere mit oder ohne Verwendung von HTML-Helfern.

Ich weiß, dass der Modellbinder von MVC kein Problem hat, wenn es um einfache Typen wie intname__, stringund boolgeht.

Ist es so etwas wie ich muss und Array stattdessen in der Aktion verwenden?

Es ist mir egal, ob ich arrayoder Listverwenden muss und auch wenn die Zeichenfolgen Iintoder stringsimmer konvertieren können. Ich brauche sie nur auf dem Server. Meine Listenkennung gibt im Moment null aus.

Javascript:

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

MVC-Aktion:

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

EDIT: Meine Anfrage AJAX wurde hinzugefügt

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

LÖSUNGEN: // Danke an @aherrick Kommentar. Ich habe das gute alte "Traditionelle" vermisst

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

Verwenden Sie den Parameter traditional und setzen Sie ihn auf true.

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

Versuchen Sie es mit diesem (ich habe es überprüft):

$(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 () {

        });
    });

Sie müssen sicherstellen, dass Ihre contentTypeapplication/json ist und Ihre Daten stringifiziert sind.

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

Mit dem Aktionsergebnis können Sie kein JSON-Objekt empfangen:

Controler verwenden:

[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-Skript:

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,
                });
1
SilentTremor