it-swarm.com.de

jquery Ajax call - Datenparameter werden nicht an die MVC Controller-Aktion übergeben

Ich übergebe zwei String-Parameter von einem jQuery-Ajax-Aufruf an eine MVC-Controller-Methode und erwarte eine Json-Antwort. Ich kann sehen, dass die Parameter auf der Clientseite aufgefüllt werden, aber die übereinstimmenden Parameter auf der Serverseite sind null.

Hier ist das Javascript:

$.ajax({  
  type: "POST",  
  contentType: "application/json; charset=utf-8",  
  url: "List/AddItem",  
  data: "{ ListID: '1', ItemName: 'test' }",  
  dataType: "json",  
  success: function(response) { alert("item added"); },  
  error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
});

Hier ist die Controller-Methode:

Function AddItem(ByVal ListID As String, ByVal ItemName As String) As JsonResult
   'code removed for brevity
   'ListID is nothing and ItemName is nothing upon arrival.
   return nothing
End Function

Was mache ich falsch?

32
Grant

Ich habe es versucht:

<input id="btnTest" type="button" value="button" />

<script type="text/javascript">
    $(document).ready( function() {
      $('#btnTest').click( function() {
        $.ajax({
          type: "POST", 
          url: "/Login/Test",
          data: { ListID: '1', ItemName: 'test' },
          dataType: "json",
          success: function(response) { alert(response); },
          error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
        });
      });
    });
</script>

und C#:

[HttpPost]
public ActionResult Test(string ListID, string ItemName)
{
    return Content(ListID + " " + ItemName);
}

Es funktionierte. Entfernen Sie contentType und setzen Sie data ohne Anführungszeichen.

31
LukLed

Wenn Sie Probleme beim Zwischenspeichern von Ajax haben, können Sie es deaktivieren:

$.ajaxSetup({cache: false});
2
Mocksy

Sie benötigen add -> contentType: "application/json; charset = utf-8",

<script type="text/javascript">
    $(document).ready( function() {
      $('#btnTest').click( function() {
        $.ajax({
          type: "POST", 
          url: "/Login/Test",
          data: { ListID: '1', ItemName: 'test' },
          dataType: "json",
          contentType: "application/json; charset=utf-8",
          success: function(response) { alert(response); },
          error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
        });
      });
    });
</script>
2
Ahmet Onur
  var json = {"ListID" : "1", "ItemName":"test"};
    $.ajax({
            url: url,
            type: 'POST',        
            data: username, 
            cache:false,
            beforeSend: function(xhr) {  
                xhr.setRequestHeader("Accept", "application/json");  
                xhr.setRequestHeader("Content-Type", "application/json");  
            },       
            success:function(response){
             console.log("Success")
            },
              error : function(xhr, status, error) {
            console.log("error")
            }
);
1
Rakesh Haladi

Wenn ich die Variable contentType entferne, erhalte ich in meinem Fall den Internal Server Error.

Nach mehreren Versuchen habe ich gearbeitet:

var request =  $.ajax({
    type: 'POST',
    url: '/ControllerName/ActionName' ,
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ projId: 1, userId:1 }), //hard-coded value used for simplicity
    dataType: 'json'
});

request.done(function(msg) {
    alert(msg);
});

request.fail(function (jqXHR, textStatus, errorThrown) {
    alert("Request failed: " + jqXHR.responseStart +"-" + textStatus + "-" + errorThrown);
});

Und das ist der Controller-Code:

public JsonResult ActionName(int projId, int userId)
{
    var obj = new ClassName();

    var result = obj.MethodName(projId, userId); // variable used for readability
    return Json(result, JsonRequestBehavior.AllowGet);
}

Bitte beachten Sie, dass der Fall von ASP.NET etwas anders ist, wir müssen JSON.stringify() auf die Daten anwenden, wie im update dieser Antwort erwähnt.

0
BiLaL