2016-05-03 4 views
1

meine Ajax-CodeMVC Reglerparameter immer null

function gonder() { 
    var params = { 
     DonationInfo: { 
      name: $('#name').val(), 
      lastname: $('#lastname').val(), 
      phone: $('#phone').val(), 
      type: $('#type').val(), 
      amounth: $('#amounth').val(), 
      quentity: $('#quentity').val() 
     } 
    }; 
    $.ajax({ 
     url: '@Url.Action("Index", "Benafactor")', 
     type: 'POST', 
     async: true, 
     data: JSON.stringify(params), 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function (data) { 
      alert(data.success); 
      $('#target').html(data); 
     }, 
     error: function() { 
      alert("error"); 
     } 
    }); 
} 

MY-Controller

[System.Web.Http.HttpPost] 
    public ActionResult Index([FromBody] Mymodel data) 
    { 
     return Json(new { success = true }); 

    } 

auch i mit einer Schnur versucht

und hier ist MyModel

public class Mymodel 
{ 
    public string name { get; set; } 
    public string lastname { get; set; } 
    public string phone { get; set; } 
    public string type { get; set; } 
    public string amounth { get; set; } 
    public string quentity { get; set; } 
} 

Ich habe versucht, hart , suchte nach allem gleiche Frage, aber nichts für mich Arbeit bitte hilft mir die Daten in Anfrage-Payload sehen kann, aber nicht die Parameter in der Steuerung

+0

Verwendung jquery Beitrag lesen Sie in diesem Link https://api.jquery.com/jquery.post/ – rashfmnb

+0

Noch einfacher als die Antworten, entfernen 'contentType' Option und verwenden' Daten: $ ('Form'). serialize(), '(.serialize()' serialisiert korrekt Ihre Formularsteuerelemente zu json) –

Antwort

3

erhalten, wenn Sie Objekt (params) als json dann der Struktur des mvc ActionResult Paramter Modells (Mymodel) serialisiert und das Objekt (params) muss die gleiche Struktur haben, in Ihrem Code params und Mymodel ist nicht die gleiche Struktur. Machen Sie es gleiche wird das Problem lösen

var params = { 
      name: $('#name').val(), 
      lastname: $('#lastname').val(), 
      phone: $('#phone').val(), 
      type: $('#type').val(), 
      amounth: $('#amounth').val(), 
      quentity: $('#quentity').val() 
     }; 
+0

vielen Dank es funktioniert –

+0

ich werde aber auf 8 Minuten warten müssen –

+0

bessere Lösung ist unten gegeben –

0

JSON.stringify ist nicht notwendig data: params.DonationInfo

1

Verwendung dieses:

var params = { 
     name: $('#name').val(), 
     lastname: $('#lastname').val(), 
     phone: $('#phone').val(), 
     type: $('#type').val(), 
     amounth: $('#amounth').val(), 
     quentity: $('#quentity').val() 
    } 

für ein komplexes Objekt, ist es besser, zu verwenden, um Variablen als es in Ajax einschließlich Methode

0
function gonder() { 
    var data= { 

      name: $('#name').val(), 
      lastname: $('#lastname').val(), 
      phone: $('#phone').val(), 
      type: $('#type').val(), 
      amounth: $('#amounth').val(), 
      quentity: $('#quentity').val() 

    }; 
    $.ajax({ 
     url: '@Url.Action("Index", "Benafactor")', 
     type: 'POST', 
     async: true, 
     data: JSON.stringify(params), 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function (data) { 
      alert(data.success); 
      $('#target').html(data); 
     }, 
     error: function() { 
      alert("error"); 
     } 
    }); 
} 

Ihr Controller wird so aussehen

[HttpPost] 
    public ActionResult Index(Mymodel data) 
    { 
     return Json(new { success = true }); 

    }