(作者:邵亮华,撰写时间:2019年1月16日)
我要讲的是复选框,多个参数同时传递与查询,这是我做的练习酒店后台管理系统项目,主要重点在于使用tb.search()的方法传参,只能使用用字符串拼接传递参数,所以我的构思是将多个参数拼接在一起形成一个字符串,化多为一,最后传递到控制器再分割,达到多个参数同时传递的效果。
在控制器设一个字符串类型的参数接收参数,在实例化一个List<EndAccountsInfor> list的列表;然后在多条件查询(在此之前先分割从页面传递来的字符串,将ID分割出来),通过for循环语句循环查询页面传递来到值,在存放到实例化的一个List<EndAccountsInfor> li的列表,再将list.AddRange(li)即将li存放到list表格
注意:数组参数如果运用到查询时,不能用tb.search()的方法拼接参数传递参数,因为这个方法只能用字符串拼接传递参数,如果不是字符串就无法传递
控制器
public ActionResult SelectCheckAccountAll(BsgridPage bsgridPage, Int16 AccountBookID, string listID)
{
List<EndAccountsInfor> list = new List<EndAccountsInfor>();
List<EndAccountsInfor> listCheckAccountAll = (
多表连接查询
select new EndAccountsInfor
{
多表连接查询的字段
}).ToList();
条件查询
if (AccountBookID > 0)
{
listCheckAccountAll = listCheckAccountAll.Where(m => m.AccountBookID == AccountBookID).ToList();
}
if (!string.IsNullOrEmpty(listID))
{
//将页面传递来的字符串通过 * 分割获取的值,都放在string类型的strid数组变量,接收分割好的字符串
string[] strid = listID.Split('*');
for (int i = 0; i < strid.Count(); i++)
{
Int16 AccountOptionID = Convert.ToInt16(strid[i]);
List<EndAccountsInfor> li = new List<EndAccountsInfor>();
li = listCheckAccountAll.Where(m => m.AccountOptionID == AccountOptionID).ToList();
list.AddRange(li);
//从数据库查询的数据赋给了实例化列表li,再将li的数据一个一个的赋给实例化列表list
}
listCheckAccountAll = list; //最后一次性赋给listSpecialAccount列表就达到一次性查询多个参数
}
HTML
获取多个复选框的值
由于tbAccountRecordInfor.search("&listID=" + strID);参数拼接传递只能是字符串,所以只能将页面每个选中的ID都转化为一个特殊的字符拼接串循环传递。
先声明一个空的strID变量,再通过for循环语句将点击获取的值拼接一个 *(check1[i].value + "*")提供给控制器分割出ID的条件
注意:substr:字符串的截取
strID = strID.substr(0, strID.length - 1);
strID字符串的截取从0开始,strID.length – 1是为了避免在控制器分割字符串时出现空白,所以截取时去除最后一位字符
如: [0*1*2*3]* 截取最后一位字符 *
Js
var check1 = $("#tbAccountOptionInfor input[type=checkbox]:checked");
var strID = "";
for (var i = 0; i < check1.length; i++) {
strID += check1[i].value + "*";
}
strID = strID.substr(0, strID.length - 1);