如何使用 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,我还将函数的返回类型更改为 ActionResult 进行测试。立即尝试 得到了答案先生,谢谢【参考方案2】:

我用@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 调用中发送表单字符串数据和图像数据

如何将多个参数从 ajax 调用传递到 MVC 控制器

通过两个具有相关日期的模型来查看 MVC4

Ajax 调用将字符串传递给 Web 服务并返回 String[]

jquery Ajax 调用 - 数据参数未传递给 MVC 控制器操作

jQuery $.AJAX 替换为 JavaScript fetch - mvc4 方法参数始终为空