2016-05-03 13 views
1

私のAjaxコードMVCコントローラパラメータ常に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コントローラ

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

    } 

はまた、私は、文字列

にしようと、ここに、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; } 
} 

である私が懸命に試みました、すべてを探した私のために同じ質問が、何も仕事は私が要求ペイロード内のデータを見ることができます助けることが

+0

使用jqueryのポストは、答えよりも簡単このリンクhttps://api.jquery.com/jquery.post/ – rashfmnb

+0

をチェック 'contentType'オプションを削除し、使用'データ:$( 'フォーム')。 –

答えて

3

あなたはシリアライズオブジェクトコントローラにパラメータを取得することはできませんしてください(params) JSONとして、その後MVC ActionResult PARAMTERモデルの構造(Mymodel)オブジェクト(params)は同じ構造である必要があります、あなたのコードでparamsMymodelは同じ構造ではありません。それは同じ

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

ありがとうございました –

+0

私は8分待たなければなりません –

+0

より良い解決策が以下に与えられます –

0

問題を解決する作るJSON.stringifyがdata: params.DonationInfo

1

使用この必要はありません:AJAXでそれを含めたよりも変数を使用するために、その優れた複雑なオブジェクトのための

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

を方法

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

コントローラーは次のようになります

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

    } 
関連する問題