如何将JSON对象传递给ASP.NET MVC 4中的控制器方法

时间:2013-08-20 23:51:24

标签: jquery json asp.net-mvc-4

我有一个HTML表格,希望将表格的内容传递给控制器​​方法。我使用JQuery创建一个数组,然后将它们转换为JSON对象。

                           var array_MACAddress = [];
                           var $MacAddress = $(".macaddress");

                           for (var i = 0, len = $MacAddress.length; i < len; i++) {
                               var $MAC = $($MacAddress[i]);
                               console.log($MAC.text()); ////for testing only!!!
                               array_MACAddress.push({
                                   key: $MAC.data("key"),
                                   value: $MAC.text()
                               });
                           }; 

(上面的代码创建一个名为“MACAddress”的列数组,然后我使用下面的代码将它们转换为JSON对象

var json_MACAddress = json.stringify(array_MACAddress);

如何将JSON对象传递给控制器​​方法?

public ActionResult ActivationManagement(String jsonData)

2 个答案:

答案 0 :(得分:3)

要发出AJAX请求,您可以执行以下操作:

$("#someDomElement").click(function() {
   $.ajax({
     url: "@Url.Content("~/YourController/ActivationManagement")",
     data: array_MACAddress,
     type: 'POST',
     contentType: 'json'
   });
});

您需要指定一个视图模型,该模型将与包含您的mac地址的ajax模型匹配:

public class MacAddress
{
   public string Key { get; set; }
   public string Value { get; set; }
}

由于您实际上有这些对象的列表,您需要按如下方式定义控制器操作:

[HttpPost]
public ActionResult ActivationManagement(List<MacAddress> macAddresses)
{
   // Your logic here...
}

和MVC模型绑定器会自动将其映射到您的模型,因为在您的AJAX调用中,您指定您发送的数据是JSON类型。

我给你的建议是insta Fiddler(http://fiddler2.com/),它将帮助你分析每个请求,以便你可以清楚地看到是否存在问题以及如何解决它。

答案 1 :(得分:0)

因此您可以使用webapi,或者如果我没记错,您只需将[HttpPost]添加到控制器方法上方的行中即可:

[HttpPost]
public ActionResult ActivationManagement(String jsonData)

现在你的ajax请求的主体需要是一个字符串,你必须将字符串转换为你可以在服务器端操作的对象,所以如果你知道从JSON对象中得到什么,那么你可能会考虑定义自己的自定义对象,然后让MVC将正文解析为自定义对象。

e.g。

public CustomObject ()
{
    public string id {get;set;}
    public string address {get;set;}
}

...

[HttpPost]
public ActionResult ActivationManagement(CustomObject jsonData)

抱歉,我对MVC有点生疏,但我认为这是一般的想法。

相关问题