【问题标题】:How to pass JSON object to controller method in ASP.NET MVC 4如何将 JSON 对象传递给 ASP.NET MVC 4 中的控制器方法
【发布时间】:2013-08-21 10:31:34
【问题描述】:

我有一个 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 请求的主体传递?
  • 我不太确定
  • 您希望使用 ajax 将数据传回控制器吗?
  • 是的。这就是我的想法
  • 我会建议 Neil 的建议。创建一个类似于您从视图传递到控制器的类型,一切都应该按预期工作。

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


【解决方案1】:

要发出 AJAX 请求,您可以这样做:

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

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

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/),它将帮助您分析每个请求,以便您清楚地了解是否存在问题以及如何解决问题。

【讨论】:

    【解决方案2】:

    所以您可以使用 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 有点生疏,但我认为这是大体思路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      相关资源
      最近更新 更多