MenuItemClick事件没能激发

cppkiller 2010-11-11 12:25:47
这是mennu对象的asp部分:

<asp:Menu ID="Menu1" runat="server" BackColor="#FFFBD6" 
DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="Medium"
ForeColor="#990000" Orientation="Horizontal" StaticSubMenuIndent="10px"
onmenuitemclick="Menu1_MenuItemClick">

<StaticSelectedStyle BackColor="#FFCC66" />
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />



<DynamicHoverStyle BackColor="#990000" BorderStyle="Solid" ForeColor="White" />



<DynamicMenuStyle BackColor="#FFFBD6" />
<DynamicItemTemplate>
<%# Eval("Text") %>
</DynamicItemTemplate>
<DynamicSelectedStyle BackColor="#FFCC66" />
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<StaticHoverStyle BackColor="#990000" ForeColor="White" />
<StaticItemTemplate>
<%# Eval("Text") %>
</StaticItemTemplate>
</asp:Menu>


这是有关的C#代码:aspx

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
public partial class menu : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
/*
说明,待写

*/

if(Session["logid"]==null)
{
Response.Redirect("login.aspx");
}else
{ // 用户验证后合格者,且在回话期内,拟构建菜单树

// Response.Write("功能菜单,用户:" + Session["login"].ToString());

String mySel = "select distinct(功能组名) from 功能表 where 功能id in (select 功能id from 用户权限表 where 用户id in (select 用户id from 用户表 where loginname= '" + Session["logid"].ToString() + "')) order by 功能组名 desc";
SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString);
SqlDataAdapter SQLDA = new SqlDataAdapter(mySel,conn);

conn.Open();
SqlDataReader SQLDR = SQLDA.SelectCommand.ExecuteReader();

Menu1.Items.Clear();
this.Menu1.Orientation = Orientation.Horizontal;
String GM;

while (SQLDR.Read())
{
GM = SQLDR["功能组名"].ToString();
MenuItem mi = new MenuItem();
mi.Text = GM;//菜单根项加一

String mySel2 = "select * from 功能表 where 功能id in (select 功能id from 用户权限表 where 用户id in (select 用户id from 用户表 where loginname= '" + Session["logid"].ToString() + "')) and 功能组名='"+GM+"' and inuse = '在用'";
SqlConnection conn2 = new SqlConnection(SqlDataSource1.ConnectionString);
SqlDataAdapter SQLDA2 = new SqlDataAdapter(mySel2, conn2);
conn2.Open();
SqlDataReader SQLDR2 = SQLDA2.SelectCommand.ExecuteReader();
while (SQLDR2.Read())
{
MenuItem mii = new MenuItem();
mii.Text = SQLDR2["功能名"].ToString();
mii.NavigateUrl = SQLDR2["url"].ToString();

mii.Value = SQLDR2["功能名"].ToString();
mi.ChildItems.Add(mii);


}

this.Menu1.Items.Add(mi);
SQLDR2.Close();
conn2.Close();
} ;

this.Menu1.Dispose();
SQLDR.Close();
conn.Close();

}

}
}


 protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
{
Session["MenuItemClicked"]=e.Item.Value;

}
中,设断电,发现程序根本就没进来。也就是说,这个事件没被激发。
我的目的是要将菜单上选到的值送回给服务器,并做一些处理。
如何办?

...全文
471 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rsy123 2011-07-21
  • 打赏
  • 举报
回复
把NavigateUrl注释掉再试就能响应了
cppkiller 2010-11-12
  • 打赏
  • 举报
回复
补充说明:应该是子菜单项点击不反应。
cppkiller 2010-11-11
  • 打赏
  • 举报
回复
根据在老外论坛看到的回复,说是:
Phillip Williams
Add MenuItems that do not set a value for the NavigateUrl property.
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.menuitemclick(VS.80).aspx
--
HTH,
Phillip Williams

故,我将我的代码改为:
     while (SQLDR2.Read())
{
MenuItem mii = new MenuItem();
mii.Text = SQLDR2["功能名"].ToString();
mii.NavigateUrl = SQLDR2["url"].ToString();

mii.Value = SQLDR2["功能名"].ToString();
mi.ChildItems.Add(mii);


}

结果,毫无小过。
查了B&G,无效。
难道必须得给微软的那些有毛病的设计师打电话才行?

/** * ///////////////////////////////////////////////// * * jQuery+ul 实现的跨浏览器菜单树 * 通过测试浏览器 ie6.0+,firefox3.5,safari3.2,opera10.0,Chrome4.0 * jquery版本:1.3.2 * * * * 用法: * // 构造菜单树对象 * var themenuTree = $("#thetree").makeTree({type:"1"}); * * // 添加菜单项 * themenuTree.addItem ( {id:"0151",pid:"015",title:"菜单项一",click:menuItemClick,data:""} ); * themenuTree.addItem ( {id:"01511",pid:"0151",title:"子菜单项",click:menuItemClick,data:""} ); * * // 获取菜单树选中项的 data 数据 * var val = themenuTree.value(); * * 说明: * 在容器对象 #thetree 上调用 makeTree(option)来构造菜单对象,再调用 addItem 方法添加菜单项 * * 菜单树对象方法: * * makeTree 方法,构造菜单树对象 * json 参数: * @param fold: boolean 菜单初始状态 true 折叠 false 打开,默认为 true * @param close: boolean 打开菜单项时是否关闭不相关的菜单 true 关闭 false 不关闭,默认为 false * @param icon: boolean 是否显示前置图标 true 显示 false 不显示,默认为 true * @param type: string 菜单类型,可取值有 1 树形菜单 2 多选树形菜单 3 单选树形菜单 4 横向弹出菜单 5 导航菜单 ,默认为 1 * @param closedImg: string 折叠状态图标路径 * @param openedImg: string 打开状态图标路径 * @param rightImg: string 右指向箭头图标路径 * @param downImg: string 下指向箭头图标路径 * @param overCss: string 菜单项移入样式类,默认为 .overCss{background-color:green;} * @param outCss: string 菜单项移出样式类,默认为 .outCss{background-color:yellow;} * @param activeCss: string 菜单项活动样式类 * @return 菜单树对象 * * addItem 方法,添加菜单项 * json 参数: * @param id: string 菜单项id * @param pid: string 父项id * @param title: string 显示标题 * @param click: function 单击事件处理方法 * @param data: object 附加数据 * * value 方法,获取菜单树选中菜单项的 data 数据 * @param all: boolean true 返回所有选中菜单项,false 只返回叶节点菜单项 * @return array * * ////////////////////////////////////// * */

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧