有个程序要用户输入菜单名,然后存入SQL的字段中,然后再网页中从SQL字段读出菜单名在动态的现实出来。这个程序在IE8下运行正常,在IE7下报错说是空指针异常,调试很久发现要是菜单名字是英文就可以要是中文就会报错。上一小段代码:
下面的代码是从数据库中读出菜单名动态构建菜单,每个菜单最下面有4个菜单:图片,文档等。。。。,菜单点击链接并传值过去,在另一个页面接受传过去的t1,t2,t3的值。要是在IE7下并且菜单名字是中文的话点击就会报错。
if (TreeView1.Nodes.Count == 0)//菜单为空才执行,避免重复添加菜单。
{
//添加根目录
TreeNode tNode = new TreeNode("数据信息", "数据信息");
this.TreeView1.Nodes.Add(tNode);
tNode.CollapseAll();
//添加一级菜单
for(int i=0; i<ds.Tables[0].Rows.Count; i++)
{
if(ds.Tables[0].Rows[i]["did"].ToString()=="0")
{
TreeNode tNode1 = new TreeNode(ds.Tables[0].Rows[i]["name"].ToString(), ds.Tables[0].Rows[i]["name"].ToString());
tNode.ChildNodes.Add(tNode1);
tNode1.CollapseAll();
//添加二级菜单
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
if (ds.Tables[0].Rows[j]["did"].ToString() == ds.Tables[0].Rows[i]["id"].ToString())
{
TreeNode tNode2 = new TreeNode(ds.Tables[0].Rows[j]["name"].ToString(), ds.Tables[0].Rows[j]["name"].ToString());
tNode1.ChildNodes.Add(tNode2);
tNode2.CollapseAll();
//添加三级菜单
TreeNode Node1 = new TreeNode("图片","图片");
tNode2.ChildNodes.Add(Node1);
Node1.NavigateUrl = "YHXS.aspx?t1=" + ds.Tables[0].Rows[i]["name"].ToString() + "&t2=" + ds.Tables[0].Rows[j]["name"].ToString() + "&t3=图片";
Node1.Target = "dmMain";
TreeNode Node2 = new TreeNode("文档", "文档");
tNode2.ChildNodes.Add(Node2);
Node2.NavigateUrl = "YHXS.aspx?t1=" + ds.Tables[0].Rows[i]["name"].ToString() + "&t2=" + ds.Tables[0].Rows[j]["name"].ToString() + "&t3=文档";
Node2.Target = "dmMain";
TreeNode Node3 = new TreeNode("音频", "音频");
tNode2.ChildNodes.Add(Node3);
Node3.NavigateUrl = "YHXS.aspx?t1=" + ds.Tables[0].Rows[i]["name"].ToString() + "&t2=" + ds.Tables[0].Rows[j]["name"].ToString() + "&t3=音频";
Node3.Target = "dmMain";
TreeNode Node4 = new TreeNode("视频", "视频");
tNode2.ChildNodes.Add(Node4);
Node4.NavigateUrl = "YHXS.aspx?t1=" + ds.Tables[0].Rows[i]["name"].ToString() + "&t2=" + ds.Tables[0].Rows[j]["name"].ToString() + "&t3=视频";
Node4.Target = "dmMain";
}
}
}
}
}