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在幕后做的任何事情)是如何掉下来的。
任何建议都是非常感谢的!
. 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示例