是这样的,我写的是一个权限分配的功能,先说下个表的关系,SysFun表:NodeId主键标识,Name功能名称,ParentNodeId父级Id;RoleInfo表:RoleId角色Id标识,其他字段忽略;RoleRight表:RoleRightId主键标识,RoleId外键,NodeId外键页面显示我是用Repeater做的,里面是一个CheckBox表示父级,一个CheckBoxList表示若干子级;显示都已经实现,给每个用户分配权限的时候,我想进来就把该用户目前拥有的权限全部勾上,我的代码如下:问题是我每次用调试的方式页面都能显示,结果也是正确的,而直接运行就报错,而且每次报错的地方都不一样,我实在很纳闷,报错位置是有时在第一个for循环,有时在第三个for循环,分别是两个List<int>为空,而我调试的都不是为空,请有经验的前辈给于指教,在此感谢! protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
CheckBox chkParent = e.Item.FindControl("chkParent") as CheckBox;
chkParent.Attributes.Add("onclick", "check(this)");//添加JavaScript
int parentNodeId = int.Parse(chkParent.CssClass);//得到该父级的NodeId List<int> list = RoleRightService.GetRoleRightParent();//得到父级NodeId的集合
for (int i = 0; i < list.Count; i++)//如果父级Id在list中则选中
{
if (parentNodeId == list[i])
chkParent.Checked = true;
}
//绑定CheckBoxList
CheckBoxList chkChird = e.Item.FindControl("chkChird") as CheckBoxList;
chkChird.DataTextField = "DisplayName";
chkChird.DataValueField = "NodeId";
chkChird.DataSourceID = null;
chkChird.DataSource = Class2.GetAllChird(parentNodeId);
chkChird.DataBind(); List<int> chird = RoleRightService.CheckChird();//得到所有子级的NodeId
foreach (ListItem li in chkChird.Items)
{
li.Attributes.Add("onclick", "checkParent(this)");//Javascript
int value = int.Parse(li.Value);
for (int index = 0; index < chird.Count; index++)
{
if (value == chird[index])
{
li.Selected = true;
}
}
}
}
}
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
CheckBox chkParent = e.Item.FindControl("chkParent") as CheckBox;
chkParent.Attributes.Add("onclick", "check(this)");//添加JavaScript
int parentNodeId = int.Parse(chkParent.CssClass);//得到该父级的NodeId List<int> list = RoleRightService.GetRoleRightParent();//得到父级NodeId的集合
for (int i = 0; i < list.Count; i++)//如果父级Id在list中则选中
{
if (parentNodeId == list[i])
chkParent.Checked = true;
}
//绑定CheckBoxList
CheckBoxList chkChird = e.Item.FindControl("chkChird") as CheckBoxList;
chkChird.DataTextField = "DisplayName";
chkChird.DataValueField = "NodeId";
chkChird.DataSourceID = null;
chkChird.DataSource = Class2.GetAllChird(parentNodeId);
chkChird.DataBind(); List<int> chird = RoleRightService.CheckChird();//得到所有子级的NodeId
foreach (ListItem li in chkChird.Items)
{
li.Attributes.Add("onclick", "checkParent(this)");//Javascript
int value = int.Parse(li.Value);
for (int index = 0; index < chird.Count; index++)
{
if (value == chird[index])
{
li.Selected = true;
}
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货