javascript - MVC 如何将数组(Guid CustomerIDs)和单个值传递给 Controller

标签 javascript arrays ajax asp.net-mvc

我正在使用 JavaScript 和 ajax 将数组和单个值传递给 Controller ​​,当调用 Controller 方法时,传入的是单个值而不是(customerID 的数组),我想知道为什么,这里是代码!

这是我的 JavaScript 和 ajax 调用:

var arrayOfCustomerID = ['11111111 - 1111 - 1111 - 1111 - 111111111112', '4b732df8-3bbc-4eab-9bf1-da98cc46d527' ,
'3e74adeb-31a8-4d6f-a66b-a34500c3acc0',' 14897bf4-f5d0-4548-a74d-a34f00ae9cad'];

var version = '3.0';

$.ajax({
         url: '/Updates/UpdateCustomers',
         type: "POST",
         datatype: "json",
         traditional: true,
         data: {
           CustomerIDs: JSON.stringify(arrayOfCustomerID),
           Version: version
               },
         success: function (data) {
         alert("success");
         }
       });

这是我的课:

public class SelectedCustomersWithVersion 
    {
        public List<Guid> CustomerIDs { get; set; }

        public string version { get; set;  }
    }

最后是我的 Controller 方法:

[HttpPost]
public ActionResult UpdateCustomers(SelectedCustomersWithVersion model)
{
 IList a = model.CustomerIDs.ToList();
 var b = model.version;
 return view();
}

当我在 Controller 模型上设置断点时,我得到了 model.CustomerIds:计数 = 0, 模型.版本:“3.0”

我不知道为什么我的 Customerids= 0 计数, 代码有问题吗? 感谢您的帮助!

最佳答案

这是由于您将参数传递给操作方法的方式。在您当前的方法中,您将它们作为一个参数发送,该参数作为逗号分隔的字符串接收, Binder 不会将其转换为 List<Guid> .

以下 Fiddler 捕获显示了您如何发送参数:

enter image description here

为了让模型绑定(bind)器正确绑定(bind) List<T>参数需要以相同的名称或分配的索引单独发送。

例如,以下两种方法都可以:

?customerIDs=1111...&customerIDs=4b73...&customerIDs=3e...

?customerIDs[0]=1111...&customerIDs[1]=4b73...&customerIDs[2]=3e...

在第二个示例中,请注意索引必须从零开始且没有间隙。

为了让它工作,您可以将您的 jQuery 代码更改为:

arrayOfCustomerID = [];
arrayOfCustomerID[0] = '11111111 - 1111 - 1111 - 1111 - 111111111112';
arrayOfCustomerID[1] = '4b732df8-3bbc-4eab-9bf1-da98cc46d527';
arrayOfCustomerID[2] = '3e74adeb-31a8-4d6f-a66b-a34500c3acc0';
arrayOfCustomerID[3] = ' 14897bf4-f5d0-4548-a74d-a34f00ae9cad';

var version = '3.0';

$.ajax({
    url: '/api/values',
    type: "POST",
    datatype: "json",
    traditional: true,
    data: {
        CustomerIDs: arrayOfCustomerID,
        Version: version
    },
    success: function (data) {
        alert("success");
    }
});

这将像这样发送参数:

enter image description here

然后它将成功绑定(bind)到您的模型:

enter image description here

最后一点,我必须从您的第一个 Guid 中删除空格为了让它绑定(bind)。

关于javascript - MVC 如何将数组(Guid CustomerIDs)和单个值传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25241561/

相关文章:

php - 动态创建的 HTML 文件输入元素不发布数据

javascript - 如何在 javascript 中获取最接近的输入类型文本值?

JavaScript 常量 |样式和关键字

php - 使用引号从php数组创建WHERE IN()子句

java - a4j :ajax? 可用事件的详细列表

javascript - 从node.js发送消息到客户端而不使用socket.io

ajax - Django & Ajax - 没有返回语句的 View

javascript - JQuery - 每个 session 运行一次

C# 字符串数组元素不更新

JavaScript 数组怪异?