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

3

我有一个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)

能否将JSON对象作为POST请求的主体传递? - Neil S
我对此并不确定。 - user2701646
你希望使用Ajax将数据传回控制器吗? - Neil S
是的,那正是我所想的。 - user2701646
我建议按照 Neil 的建议操作。创建与您从视图到控制器传递的类型类似的类型,一切都应该按预期工作。 - qamar
显示剩余2条评论
2个回答

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...
}

如果在AJAX调用中指定了JSON类型的数据,MVC模型绑定器将自动将其映射到您的模型。请注意,保留contentType标签。

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


0

所以您可以使用 WebAPI,或者如果我记得正确的话,您只需在控制器方法上面添加 [HttpPost] 即可:

[HttpPost]
public ActionResult ActivationManagement(String jsonData)

现在你的ajax请求体需要是一个字符串,你需要将这个字符串转换成一个可以在服务器端操作的对象,所以如果你知道JSON对象的期望值,你可以考虑定义自己的自定义对象,然后让MVC将请求体解析为你的自定义对象。

例如:

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

...

[HttpPost]
public ActionResult ActivationManagement(CustomObject jsonData)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接