asp.net MVC 5模型绑定的byte[]用ajax GET请求产生空值

本文关键字:GET ajax 请求 空值 MVC net 模型 绑定 byte asp | 更新日期: 2023-09-27 18:02:55

我试图在我的控制器中填充以下方法的变量。

public ActionResult Index(byte[] status, byte type)

我的问题是,我一直得到- null -当使用jQuery进行AJAX调用时,这个参数。

字节[]'status'旨在作为值的集合,用于比较DB查询中的记录,以便返回符合一个或多个条件(status: 0=pending, 1=Completed等)的所有记录

旁注:存储这些记录的表有'status'和'type'列,定义为tinyint…因此,生成的POCO类的属性定义为byte:/

这是jQuery AJAX调用

$.get( "/Activity/Index", $.param({ type: $actiontype, status: $status }), function (response) { $('#ActivitySubIndex').html(response) } )

生成如下的GET请求

http://localhost:8084/Activity/Index?type=0&status[]=0&status[]=1&status[]=2

,

当我改变jQuery准备发送到服务器的数据的方式时,通过在$上指定" traditional "标志。参数函数如下

$.param({ type: $actiontype, status: $status }, true)

生成如下请求

http://localhost:8084/Activity/Index?type=0&status=0&status=1&status=2

…现在我从服务器得到一个错误,说

输入不是一个有效的Base-64字符串,因为它包含一个非Base-64字符,两个以上的填充字符,或者填充字符中有一个非法字符。

不太确定…所以现在我要弄清楚模型绑定(或MVC在幕后做的任何事情)是如何掉下来的。

任何建议都是非常感谢的!

asp.net MVC 5模型绑定的byte[]用ajax GET请求产生空值

. Net MVC模型绑定似乎希望您按照如下方式定义方法。

    public ActionResult Index(IEnumerable<byte> status, byte type)

还需要准备jQuery AJAX函数来发送将"traditional"标志设置为true的参数

您只需要使用我创建的这个函数:

function ParamsBuilder(obj, listname, firstParam) {
    // obj : [ { Name = "Id", Value = "2" }, { Name = "Name", Value = "A" }, { Name = "Id", Value = "3" }, { Name = "Name", Value = "B" }, { Name = "Id", Value = "4" }, { Name = "Name", Value = "Z" }, ]
    // obj : [ { Value = "2" }, { Value = "3" }, { Value = "4" } ]
    // obj : [ 2, 3, 4 ]
    // listname: Name of the parameter like "/Controller/Action/param" where param is a list/collection/array
    // firstParam: if is the first param or not, to apply ? or &
    var str = "";
    $(obj).each(function (idx, element) {
        if (element.Name != null && element.Name != "" && element.Name != undefined) {
            str += "&" + listname + "[" + idx + "]." + element.Name + "=" + element.Value;
        }
        else if (element.Value != null && element.Value != "" && element.Value != Value) {
            str += "&" + listname + "[" + idx + "]=" + element.Value;
        }
        else {
            str += "&" + listname + "[" + idx + "]=" + element;
        }
    });
    if (firstParam) {
        str = "?" + str.substring(1);
    }
    return str;
}

就像这样命名:

var statusObj = [ 1, 2, 3, 4, 5, 6];
var url = "/Activity/Index?type=0" + ParamsBuilder(statusObj, "status", false);

JSFiddle示例