0

我尝试使用 Ajax 调用一项操作,当我有一个项目请求 URL 时,它将如下所示:

http://localhost:xxxx/User/getvarelinje?items=AAAADwCZbrc

一切正常,但是当我有更多的项目请求 URL 将是这样的:

http://localhost:xxxx/User/getvarelinje?items=AAAADwCZbrc=&items=AAAADwCZ0QU=

而且我会收到以下错误:

输入不是有效的 Base64 字符串,因为它包含的字符不是 base 64 字符、两个以上的填充字符或填充字符中的无效字符。

这是我的阿贾克斯:

<script>

    $("#BasketClick").click(function (e) {
        e.preventDefault();
        var holderHTML = '';
        var params = "?";
        var seperator = "";

        for (var i = 0; i < localStorage.length; i++) {

            let key = localStorage.key(i);
            params += seperator + "items=" + key;
            seperator = "&";

        }

        $.ajax({
            type: "GET",
            url: "/User/getvarelinje" + params,
            dataType: 'json',
            success: function (values) {

                console.log(values);
                for (var i = 0; i < values.length; i++) {
                    value = values[i]
                    console.log(value);

                    if (value != null) {

                        holderHTML += '<li>' + value.ItemName + '</li>';
                        holderHTML += '<li>' + value.Description + '</li>';
                    }
                }

             $('#RMABasket').html(holderHTML);
            },
        })

    });

这是我的行动:

[HttpGet]
public JsonResult getvarelinje(byte[] items) {

    var _getItemsLine = db.namespace.Where(s=>s.timestamp == items)
            .Select(t=>new GetItemslineVM {  Description = t.Description , ItemName = t.No_ })
            .ToList();

    return Json(_getItemsLine, JsonRequestBehavior.AllowGet);
}

这是我的模态:

public class tablenamespace
  {
        [Timestamp]
        public byte[] timestamp { get; set; }
  }

谁能帮帮我吗 :)

4

1 回答 1

1

在您的 ajax 函数中,因为值将在 url 中发送,您需要使用函数encodeURIComponent解析您的参数。像这样:

$("#BasketClick").click(function (e) {
    e.preventDefault();
    var holderHTML = '';
    var params = "?";
    var seperator = "";

    for (var i = 0; i < localStorage.length; i++) {

        let key = encodeURIComponent(localStorage.key(i));
        params += seperator + "items=" + key;
        seperator = "&";

    }

    $.ajax({
        type: "GET",
        url: "/User/getvarelinje" + params,
        dataType: 'json',
        success: function (values) {

            console.log(values);
            for (var i = 0; i < values.length; i++) {
                value = values[i]
                console.log(value);

                if (value != null) {

                    holderHTML += '<li>' + value.ItemName + '</li>';
                    holderHTML += '<li>' + value.Description + '</li>';
                }
            }

         $('#RMABasket').html(holderHTML);
        },
    })

});

在您的控制器中,我相信您不想将所有 base64 字符串合并为一个。所以你需要分别处理每一个。像这样:

public JsonResult getvarelinje2(string[] items) 
{
    var temp = new List<byte[]>(); // Create a list for handle each array
    temp.AddRange(items.Select(i => Encoding.Unicode.GetBytes(i))); // Converts each string into one byte array

    // Here you needs to find if there is a better way to compare two byte arrays.
    var _getItemsLine = db.namespace.Where(s => temp.Contains(s))  
                .ToList();

    return Json(_getItemsLine, JsonRequestBehavior.AllowGet);
}
于 2019-11-27T12:31:41.960 回答