2016-07-31 103 views
1

我有一個剃鬚刀視圖,下面的AJAX Jquery將UserData對象發佈到控制器。它調用操作方法,但在控制器中調試時參數中的值爲空。我已經看過在網上,並在類似的問題計算器,但仍無法看到下面的代碼丟失:Ajax Json將null發佈到控制器操作方法

在我的Razor視圖:

$(document).ready(function(){ 
    $('#button').click(function(e){ 
     e.preventDefault(); 

     var UserData = {"name":"test"} 

     $.ajax({ 
      url: '/Home/Send/', 
      data : JSON.stringify(UserData), 
      type: 'POST', 
      traditional: true, 
      contentType: 'json', 
      success: function (data) { 
       $('#message').html("json data was sent to controller"); 
      } 
     }); 
    })}); 

在我的控制器:

[HttpPost] 
public JsonResult Send(UserData userdata) 
{ 
    return Json(new { status = true }); 
} 

public class UserData 
{ 
    public string name { get; set; } 
} 

UserData對象與我在AJAX post中發送的對象相匹配,但controller action方法中的參數值爲null。

我還需要添加什麼來使數據通過控制器?

回答

1

將您的contentType更改爲'application/json'。這告訴ASP.NET MVC將請求主體反序列化爲JSON,並且它將修正控制器上的空值。

你的Ajax代碼看起來類似這樣:

var UserData = {"name":"test"} 

$.ajax({ 
    url: '/Home/Send/', 
    data : JSON.stringify(UserData), 
    type: 'POST', 
    traditional: true, 
    contentType: 'application/json', 
    success: function (data) { 
     $('#message').html("json data was sent to controller"); 
    } 
}); 
+0

謝謝這個工作。我以爲我曾嘗試過'application/json'和其他一些內容類型。是否有可能使用這種方法在@ Html.BeginForm中發佈數據以提交表單值,或者是否必須使用表單值創建一個javascript對象,然後將其作爲上述示例中的數據與ajax一起發佈? – Theomax

+1

沒問題!使用表單數據,您可以簡單地調用'$('#yourForm')。serialize()'而不需要明確地發送帶請求的內容類型。默認情況下,如果沒有指定jQuery,則發送'application/x-www-form-urlencoded'作爲ajax請求的內容類型。只要確保您的表單字段具有正確的名稱,並且ASP.NET MVC將能夠讀取請求數據。 –

相關問題