C# 访问列表计数时索引超出范围
我面临着非常奇怪的情况。我有一个客户列表,并且根据某些条件筛选该列表。例如,如果用户搜索电子邮件,我会过滤掉它,以获得与特定电子邮件匹配的记录。此外,我还计算了分页,这在第1页的情况下运行良好。但当我试着给它两页的时候,它给了我奇怪的行为。首先查看下面的代码 对于第1页,这行代码运行良好C# 访问列表计数时索引超出范围,c#,json,linq,asp.net-mvc-4,C#,Json,Linq,Asp.net Mvc 4,我面临着非常奇怪的情况。我有一个客户列表,并且根据某些条件筛选该列表。例如,如果用户搜索电子邮件,我会过滤掉它,以获得与特定电子邮件匹配的记录。此外,我还计算了分页,这在第1页的情况下运行良好。但当我试着给它两页的时候,它给了我奇怪的行为。首先查看下面的代码 对于第1页,这行代码运行良好 int total = _customerlist.Count(); 但当我在参数中有第二个页面时,它给了我“索引超出范围。必须是非负的并且小于集合的大小。”错误。然而,在这两种情况下,我仍然有记录,第1页有
int total = _customerlist.Count();
但当我在参数中有第二个页面时,它给了我“索引超出范围。必须是非负的并且小于集合的大小。”错误。然而,在这两种情况下,我仍然有记录,第1页有10条记录,第2页有5条记录。所以当我得到这个错误时,我在“\u customerlist”中有5条记录
为什么我没有得到这个错误,当我有第1页
控制器
public ActionResult CustomerList(int page, int rp, string sortname, string sortorder, string qtype, string query)
{
var _customerlist = _customerRepository.Table;
if (!string.IsNullOrEmpty(qtype) && !string.IsNullOrEmpty(query))
{
if (qtype == "Email")
{
_customerlist = _customerlist.Where(p => p.Email.Contains(query));
}
else if (qtype == "LastName")
{
_customerlist = _customerlist.Where(p => p.LastName.Contains(query));
}
else if (qtype == "FirstName")
{
_customerlist = _customerlist.Where(p => p.FirstName.Contains(query));
}
else if (qtype == "Age")
{
_customerlist = _customerlist.Where(p => p.Age.ToString().Contains(query));
}
else if (qtype == "Sex")
{
_customerlist = _customerlist.Where(p => p.Sex.ToString().Contains(query));
}
else if (qtype == "Email")
{
_customerlist = _customerlist.Where(p => p.Email.ToString().Contains(query));
}
else if (qtype == "MembershipType")
{
_customerlist = _customerlist.Where(p => p.MembershipType.ToString().Contains(query));
}
}
_customerlist = _customerlist.Skip((page - 1) * rp).Take(rp);
int total = _customerlist.Count();
return CreateFlexiJson(_customerlist, page, total);
}
private JsonResult CreateFlexiJson(IEnumerable<CustomerPartRecord> items, int page, int total)
{
List<Object> rows = new List<Object>();
foreach (var item in items)
{
var familystring = string.Empty;
if (item.MembershipType == "Family")
{
var familymembers = from p in _familyRepository.Table.Where(p => p.UserId == item.Email) select p;
int i = 1;
foreach (var familyitem in familymembers)
{
if (i == 1)
{
familystring = familystring + "<label style=\"" + "color:#2B3856;font-weight: bold;" + "\">" + item.FirstName + " " + item.LastName + " (Head)</label>";
familystring = familystring + "<hr>" + "</hr>";
familystring = familystring + "<label style=\"" + "color:#2B3856;" + "\">" + familyitem.FirstName + " " + familyitem.LastName + "</label>";
}
else
{
familystring = familystring + "<label style=\"" + "color:#2B3856;" + "\">" + familyitem.FirstName + " " + familyitem.LastName + "</label>";
}
i++;
}
}
else
{
familystring = "N/A";
}
rows.Add(new
{
id = item.Id,
cell = new string[] {
item.Id.ToString(),
item.FirstName,
item.LastName,
item.Email,
item.HouseNameOrNumber,
item.Street,
item.County,
item.Town,
item.Age.ToString(),
item.Sex,
item.BCUMembershipNumber,
item.MembershipType,
item.PostCode,
item.HomePhone,
item.MobilePhone,
item.DOB,
item.EmergencyContactName,
item.EmergencyContactAddress,
item.EmergencyContactPhone,
item.EmergencyContactMobile,
item.EmergencyContactEmail,
item.CreatedUtc.ToShortDateString(),
String.Format(familystring),
String.Format("<a href=" + "'" + "Member/More?UserId=" + item.Email + "'" + ">View</a>") ,
}
});
}
var result = new { page = page, total = total, rows = rows };
return Json(result);
}
尝试使用动态Linq
你是要把它拉到Gridview还是其他地方。。?那是什么控件..我正在使用jquery flexigrid您的代码不完整,请完成它以便能够提供帮助我已经为flexigrid添加了cshtml代码,还为controller添加了一些代码。
page
zero-based?异常发生在哪一行?您应该检查page-1
是否为负数。
$('#CustomerList').flexigrid({
url: '@Url.Action("CustomerList", "Customer")',
dataType: 'json',
colModel: [
{
display: 'Id',
name: 'Id',
width: 150,
sortable: true,
align: 'left',
hide: true
},
{
display: 'First Name',
name: 'FirstName',
width: 80,
sortable: true,
align: 'left'
},
{
display: 'Last Name',
name: 'LastName',
width: 80,
sortable: true,
align: 'left'
},
{
display: 'Email',
name: 'Email',
width: 140,
sortable: true,
align: 'left'
},
{
display: 'HouseNameOrNumber',
name: 'HouseNameOrNumber',
width: 200,
sortable: true,
align: 'left',
hide: true
},
{
display: 'Street',
name: 'Street',
width: 200,
sortable: true,
align: 'left',
hide: true
},
{
display: 'County',
name: 'County',
width: 200,
sortable: true,
align: 'left',
hide: true
},
{
display: 'Town',
name: 'Town',
width: 200,
sortable: true,
hide: true,
align: 'left'
},
{
display: 'Age',
name: 'Age',
width: 30,
sortable: true,
align: 'left'
},
{
display: 'Sex',
name: 'Sex',
width: 30,
sortable: true,
align: 'left'
},
{
display: 'B.C.U',
name: 'BCUMembershipNumber',
width: 60,
sortable: true,
align: 'left'
},
{
display: 'Membership Type',
name: 'MembershipType',
width: 100,
sortable: true,
align: 'left'
},
{
display: 'Post Code',
name: 'PostCode',
width: 100,
sortable: true,
align: 'left',
hide: true,
},
{
display: 'Home Phone',
name: 'HomePhone',
width: 100,
sortable: true,
align: 'left',
hide: true,
},
{
display: 'Mobile Phone',
name: 'MobilePhone',
width: 100,
sortable: true,
align: 'left',
hide: true,
},
{
display: 'DOB',
name: 'DOB',
width: 100,
sortable: true,
align: 'left',
hide:true
},
{
display: 'EmergencyContactName',
name: 'EmergencyContactName',
width: 100,
sortable: true,
align: 'left',
hide:true
},
{
display: 'EmergencyContactAddress',
name: 'EmergencyContactAddress',
width: 100,
sortable: true,
align: 'left',
hide:true
},
{
display: 'EmergencyContactPhone',
name: 'EmergencyContactPhone',
width: 100,
sortable: true,
align: 'left',
hide:true
},
{
display: 'EmergencyContactMobile',
name: 'EmergencyContactMobile',
width: 100,
sortable: true,
align: 'left',
hide:true
},
{
display: 'EmergencyContactEmail',
name: 'EmergencyContactEmail',
width: 100,
sortable: true,
align: 'left',
hide:true
},
{
display: 'Member Since',
name: 'CreatedUtc',
width: 70,
sortable: true,
align: 'left',
},
{
display: 'Family',
name: '',
width: 150,
sortable: true,
align: 'left'
},
{
display: 'Other Info.',
name: '',
width: 50,
sortable: true,
align: 'left'
}
],
buttons: [
{
name: 'Edit',
bclass: 'edit',
onpress: test
}, {
name: 'Delete',
bclass: 'delete',
onpress: test
}, {
separator: true
}],
searchitems: [
{
display: 'First Name',
name: 'FirstName'
},
{
display: 'Last Name',
name: 'LastName'
},
{
display: 'Email',
name: 'Email'
},
{
display: 'Age',
name: 'Age'
},
{
display: 'Sex',
name: 'Sex'
},
{
display: 'Membership Type',
name: 'MembershipType'
}
],
sortname: "LastName",
sortorder: "asc",
usepager: true,
title: 'Customer',
useRp: true,
rp: 10,
showTableToggleBtn: true,
width: 920,
height: 500,
singleSelect: true
});