Ajax Post-Parameter ist Immer Null im MVC-app
Habe ich eine einfache post, die arbeitet in einer test-app
Controller-Code
public ActionResult Delete(string Id)
{
... delete record ...
}
JavaScript
function delAnnouncement(id) {
$.ajax({
type: "POST",
url: "@Url.Action("Delete", "Announcements")",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ "Id": "03d23684-098a-4ae8-8fa2-7d9ce70d63ef" }), //Hard coded for testing
success: function (data) {
$("#AnnouncementsPH").replaceWith(data);
}
});
}
Habe ich eine einfache test-Anwendung, und es funktioniert dort.
Ich bin auf der Suche nach Ideen, was kann es in der vorliegenden Anwendung würden immer zur Folge, dass die übergebene id auf null sein.
Dinge, die ich versucht habe:
Route Info ist das gleiche zwischen den zwei Anwendungen.
Sie sind beide sichere https-websites.
Andere Formen, die auf der bestehenden website zu arbeiten, wie erwartet. Dies ist der einzige Ort, der eine javascript-post mit parameter verwendet wird. Es ist nur die neue Ansicht listet alle system-Ankündigungen.
So weit wie ich kann sagen, das HTML gültig ist.
Fiddler zeigen die Daten gesendet werden.
Ich habe versucht, einfach codieren Sie in der Id
zu übergeben.
Ich habe keine Ahnung, was könnte die Ursache der Post
nicht zu funktionieren.
Vielen Dank für alle Vorschläge
Edit 1: hier ist die fiddler ' Raw post
POST https://localhost:44300/Announcements/Delete HTTP/1.1
Host: localhost:44300
Connection: keep-alive
Content-Length: 39
Accept: */*
Origin: https://localhost:44300
X-Requested-With: XMLHttpRequest
Content-TypeOfNotification: application/json; charset=utf-8
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Referer: https://localhost:44300/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: jetbrains.charisma.main.security.PRINCIPAL=NmI4YmFhZTExMThjZDZkZjNmZTBhMDNiZWM4NmY3MDYzZWNiMWE3M2ZmZDM5ODMwYjViMjczN2ZkZmU3YmZlZTpyb290; TCSESSIONID=233EBE63123BA35468235F441F54D7E4; ASP.NET_SessionId=ycnx1ejeyahzipwduux2quqz; __RequestVerificationToken=FnOKGFfBZKEBX4E0KBoV9133e5KK3h9Pd_OjDzNPjv7ifMTMk5uHUPmT621hOQFyOCwW5IhdewKLPDMs2_9jY2vVwrHLYOU9f0F86mN-NoQ1; .AspNet.ApplicationCookie=V8ZnbAx_2_H1Wx946VLcQ235XplzC-uvKdw4CP7Sm8ZVnJu9pG63EuzC0ptOZZNBvzZkRjB0RJS25Pn1WHOzeQSrqoWl87keqRDS6_vMwZ9L6PgKU0rJz7OhD7eKps8l3tzR097zI5WbU_chUZFKLLw1c__rfN3Fy6BbHC1qNtgx0C86AShhG5EsNiruYqJZn-Uj7Z2h75YcZctCFniMyuzD-9RetcMjkN3_PbAJg-_urfntG9NwsMEQdBf1b3K9H3GP_wUYRhnbQdNZpuAkAEa6bVfJiHrnKFhnhLkP8BAfocbMKES1wQKbXBfcNn62cEKUu3On3lHNCNN4zEvOhxF1aDaBk-yghOtvtNkROeFTKMQFD0U-XXAf-RKm0Nwgp1Tb2Ip2U42vshDRNGXQSkOojisVUxiPmkrxDtckNycQd0br1cFSqxfeXyg3cg_vKUP1VMBQcBQxZO6MVLSCDdcpANyoE43IoLp3BHgURJZP88vF18JfVV646XGOZ3QU
Id=03d23684-098a-4ae8-8fa2-7d9ce70d63ef
Wie Sie sehen können die Id geschrieben, um den controller, nur eben nicht geparst und geliefert, um die parameter in der Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie fügen Sie den parameter wie:
Oder Sie verwenden die jQuery-ajax-Daten-parameter direkt:
Referenzen: http://api.jquery.com/jquery.ajax/
Habe ich noch nicht, fand diese Antwort irgendwo sonst, so hatte ich es entdecken durch Experimentieren.
Werden Sie feststellen, dass in Ihrem controller, es ist eine Anforderung erhalten.Form-Objekt und wenn man sich im Antrag.Form[0] finden Sie Ihre Daten. Der Grund, dass es Daten in der form, aber MVC ist zu sehen, wie es null, dass der Schlüssel zum form-element Gebucht wird, ist "" (leer).
Client-Seite, müssen Sie den content-type richtig, und vor Ihren Daten mit sowas wie "myData=" + JSON.stringify(myJSONObject), wo "myData" ist der name des Schlüssels, den Sie hinzufügen, etwa so:
$.ajax({
type: "POST",
url: URL,
data: "myData="+JSON.stringify(myJSONObject),
contentType: "application/x-www-form-urlencoded; charset=utf-8"
Auf der server-Seite, Ihre [HttpPost] Endpunkt hat als Eingabe eine variable mit dem gleichen namens als der Schlüssel, den Sie erklärt in Ihrem AJAX, etwa so:
`
Ich glaube nicht, dass Sie verwenden müssen
JSON.stringify
für die Daten. Standardmäßig erhalten Sie Werte gesendet werden wie Jason mit ajax.Versuchen, Diese
Keiner der Antworten, die für mich gearbeitet, also statt ich habe Sie erfolgreich gelöst mit:
Javascript mit JQuery:
C# ASP.NET:
Den
Post
Parameterliste Signatur muss mit der POST-Anforderungs-url, z.B.?id=123
bedeutet, es muss eine MethodePost(int id)
. Hoffe, das jemand hilft.Stellen Sie sicher, dass testen Sie Ihre back-end mit Briefträger, bevor Sie blaim Ihre front-end JS !
Seltsam JS ist
$.ajax({ ... });
funktionierte nicht von alleine, aber wenn ich beide JQuery$.post(...);
und$.ajax({...})
POST-requests, dann beide gearbeitet - sehr seltsam.