将子项绑定到菜单控件asp.net中


DataRow[] drowpar = dt.Select("Parent_Id=" + 0);
foreach (DataRow dr in drowpar)
{
MenuItem objMenuItem = new MenuItem();
objMenuItem.Text = dr["Page_Name"].ToString();
objMenuItem.NavigateUrl = dr["Page_Url"].ToString();
MenuBar.Items.Add(objMenuItem);
}
foreach (DataRow dr in dt.Select("Parent_Id >" + 0))
{
MenuItem objMenuItem = new MenuItem();
objMenuItem.Text = dr["Page_Name"].ToString();
objMenuItem.NavigateUrl = dr["Page_Url"].ToString();
//MenuBar.FindItem(dr["Parent_Id"].ToString()).ChildItems.Add(objMenuItem);
MenuBar.FindItem(dr["Parent_Id"].ToString()).ChildItems.Add(objMenuItem);
//MenuBar.Items.Add(objMenuItem);
}

我正在使用数据库绑定asp.net菜单控件,并在下面的子项绑定到菜单中获得它

对象引用未设置为对象的实例。

MenuBar.FindItem(dr["Parent_Id"].ToString()).ChildItems.Add(objMenuItem);

该错误消息只在特定情况下发生,可能的原因是:

  • objMenuItem为null,这在您的代码中显然不是
  • dr["Parent_Id"]为空,调用ToString()导致错误
  • MenuBar.FindItem(dr["Parent_Id"].ToString())-找不到具有给定父ID的项目
  • 菜单项上的ChildItems集合为空

如果你想真正确定对象在哪里不是null,那么你可以做以下操作:

var id = dr["Parent_ID"].ToString();
var menuItem = MenuBar.FindItem(id);
if (menuItem != null)
menuItem.ChildItems.Add(objMenuItem);

将代码放在一起会掩盖实际错误发生的位置。注意,还有一种情况我没有考虑,那就是错误在MenuBar本身中,并且它被屏蔽了。如果没有看到完整的堆栈跟踪,很难判断。如果你能发布,我们可以进一步隔离它。

最新更新