为了得到更好的答案,你很多人想编辑你的问题,以更好地解释你正在尝试完成。
没有NavigateUrl
属性的Menu控件会发出HTML,其中包含一个(您的菜单项)列表,其中包含通过某些Javascript执行回发的超链接。
<ul class="level1">
<li>
<a class="level1selected" href="#"
onclick="__doPostBack('ctl00$MainContent$NavigationMenu','#')">
Item caption</a>
</li>
</ul>
当处理菜单单击事件,如果你的目的是将用户重定向到另一个页面,我建议干脆设置NavigateUrl
属性上的菜单项,而不是使用Response.Redirect()
。
<asp:MenuItem Text="Item caption" Value="#" NavigateUrl="~/TargetPage.aspx" />
如果设置了NavigateUrl
属性,你会发现onclick事件甚至没有被添加到锚标签组成的菜单项的HTML。
<ul class="level1">
<li>
<a class="level1" href="TargetPage.aspx">Item caption</a>
</li>
</ul>
如果你不打算使用的菜单导航,而是进行一些逻辑和更新页面被点击菜单项时,你可能会考虑把你的菜单在UpdatePanel
并建立菜单触发异步回传。
ASPX:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="NavigationMenu" />
</Triggers>
<ContentTemplate>
<asp:Label ID="label1" runat="server"></asp:Label>
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="true" IncludeStyleBlock="false" Orientation="Horizontal" onmenuitemclick="NavigationMenu_MenuItemClick">
<Items>
<asp:MenuItem Text="Item caption" Value="#" />
</Items>
</asp:Menu>
</ContentTemplate>
</asp:UpdatePanel>
代码背后:
protected void NavigationMenu_MenuItemClick(object sender, MenuEventArgs e)
{
SomeFunction();
}
private void SomeFunction()
{
//Performed some logic
label1.Text = "Altered the page on menu item click";
}
谢谢您的回答。我的意图是,'MenuItem'将从代号隐藏中调用一个函数。这个函数实际上调用一个'Timer_Tick'来更新页面上的'UpdatePanels'。非常类似于GMail页面内的“刷新”按钮,刷新收件箱而不刷新整个页面。 – toy4fun 2012-03-16 10:55:59
我刚刚测试过你的建议。 'Timer_Tick'被调用,但页面的UpdatePanels不会被更新。一旦计时器自行嘀嗒一声 - 一切正常。此外,“脚本块”文件正在建立,在Visual Studio中显示。运行几分钟后,应用程序挂起。奇怪... – toy4fun 2012-03-16 14:06:14