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 int
name__, string
und bool
geht.
Ist es so etwas wie ich muss und Array stattdessen in der Aktion verwenden?
Es ist mir egal, ob ich array
oder List
verwenden muss und auch wenn die Zeichenfolgen Iint
oder strings
immer 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
}
});
Verwenden Sie den Parameter traditional
und setzen Sie ihn auf true
.
$.ajax({
type: "POST",
url: "/URL",
dataType: "json",
traditional: true,
data: {}
});
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 contentType
application/json
ist und Ihre Daten stringifiziert sind.
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,
});