我有一个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)
答案 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有点生疏,但我认为这是一般的想法。