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)
4

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

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

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

于 2013-08-21T02:07:02.377 回答
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 有点生疏,但我认为这是一般的想法。

于 2013-08-21T00:08:58.807 回答