2016-07-31 84 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将能够读取请求数据。 –

相关问题