我有一个菜单项,点击后调用C#代码隐藏功能。
函数不会被调用,整个页面都会被刷新。
在aspx中:
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" onmenuitemclick="NavigationMenu_MenuItemClick">
<Items>
<asp:MenuItem Text="Item caption" Value="#" />
</Items>
</asp:Menu>
在C#中:
protected void NavigationMenu_MenuItemClick(object sender, MenuEventArgs e)
{
Response.Redirect("");
SomeFunction();
}
如果我正在删除重定向调用,页面会刷新并且看起来像一团糟。 欢迎任何建议。
答案 0 :(得分:0)
为了获得更好的答案,您可能希望编辑您的问题以更好地解释您要完成的任务。
没有NavigateUrl
属性的菜单控件会发出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";
}