如何使用 Ajax 调用 MVC4 传递两个字符串数组
Posted
技术标签:
【中文标题】如何使用 Ajax 调用 MVC4 传递两个字符串数组【英文标题】:How to pass two String arrays using Ajax call MVC4 【发布时间】:2020-03-14 13:31:29 【问题描述】:我想使用 Ajax 将两个字符串数组从视图传递到控制器。但是在传递时显示错误 jquery-latest.min.js:4 POST http://localhost:5342/Purchase/ClearCart 500(内部服务器错误) 该方法没有传递给控制器。用断点尝试。这是传递字符串 []
的方式 var items = $('.mids').map(function ()
return $(this).val()
).get();
var counts = $('.counts').map(function ()
return $(this).val()
).get();
if (BOLT.response.txnStatus == 'SUCCESS')
alert("success");
$.ajax(
url: "/Purchase/ClearCart",
type: "POST",
contentType: "application/json",
//dataType: "text",
data: mid: items, count: counts ,
success: function (result)
alert("success");
,
error: function (e)
alert("Failed");
);
它返回“失败”响应和上述错误。
控制器
[HttpPost]
public void ClearCart(string[] mid,string[] count)
int uid=Convert.ToInt32(Session["uid"]);
userService.ClearCart(uid, mid,count);
这是 Mid 和 count 中的值:
【问题讨论】:
你能显示data: mid: items, count: counts
的确切值吗?我们需要看到这一点,以便为它制作模型。
@Jerdine Sabio 更新了我的问题。我只是将值 (mid,count) 放在两个列表中
因为你没有传入 json。删除contentType: "application/json",
您从 jquery 发送单个对象,在控制器中在 Map 中获取这些参数,然后使用键 mid 和 count 检索值
哦,好吧,澄清一下这些只是字符串数组,是吗?
【参考方案1】:
您需要在 POST 期间将值绑定到对象。
-
创建要绑定的类
public class AjaxModel
public List<int> mid get;set;
public List<int> count get;set;
// Alternatively, try list string
// public List<string> mid get;set;
// public List<string> count get;set;
-
修改 ClearCart 以在参数中包含
AjaxModel model
[HttpPost]
public ActionResult ClearCart(AjaxModel model)
return Content(model.mid.Count())
// int uid=Convert.ToInt32(Session["uid"]);
// userService.ClearCart(uid, model.mid, model.count);
-
修改 ajax 调用以包含
contentType: application/json
$.ajax(
url: "/Purchase/ClearCart",
type: "POST",
contentType: "application/json",
data: mid: items, count: counts ,
success: function (result)
alert("success");
,
error: function (e)
alert("Failed");
);
【讨论】:
试过但它显示错误“有一些无效的参数” @codeseeker 你能把 mid 和 count 的数据包括进来吗?Console.log(items)
Console.log(counts)
我以为它们是列表字符串,看起来它们可能不是
先生,添加了屏幕截图。请看一下
@codeseeker 我更新了类以使用 List我用@Jerdine Sabio 的回答解决了一些调整。
var clr = new Object();
clr.mid = items;
clr.count = counts;
$.ajax(
url: "/Purchase/ClearCart",
type: "POST",
contentType: "application/json",
dataType: JSON,
data: JSON.stringify(clr),
success: function (result)
alert("success");
,
error: function (e)
alert("Failed");
);
在控制器中
public class SampleModel
public string[] mid get; set;
public string[] count get; set;
[HttpPost]
public JsonResult ClearCart(SampleModel model)
int[] matids = Array.ConvertAll(model.mid, int.Parse);
int[] mcounts = Array.ConvertAll(model.count, int.Parse);
//rest of the code
【讨论】:
将您的答案标记为答案,以便可以关闭。干得好。以上是关于如何使用 Ajax 调用 MVC4 传递两个字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 调用将字符串传递给 Web 服务并返回 String[]