2012-03-15 40 views
0

我有一个菜单项,单击时调用C#代码隐藏功能。
函数没有被调用,整个页面被刷新。防止页面刷新时处理MenuItemClick服务器

在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(); 
} 

如果我删除了重定向呼叫时,页面刷新GET,看起来像一个烂摊子。 任何建议将受到欢迎。

回答

0

为了得到更好的答案,你很多人想编辑你的问题,以更好地解释你正在尝试完成。

没有NavigateUrl属性的Menu控件会发出HTML,其中包含一个(您的菜单项)列表,其中包含通过某些Javascript执行回发的超链接。

<ul class="level1"> 
    <li> 
     <a class="level1selected" href="#" 
      onclick="__doPostBack(&#39;ctl00$MainContent$NavigationMenu&#39;,&#39;#&#39;)"> 
      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"; 
} 
+0

谢谢您的回答。我的意图是,'MenuItem'将从代号隐藏中调用一个函数。这个函数实际上调用一个'Timer_Tick'来更新页面上的'UpdatePanels'。非常类似于GMail页面内的“刷新”按钮,刷新收件箱而不刷新整个页面。 – toy4fun 2012-03-16 10:55:59

+0

我刚刚测试过你的建议。 'Timer_Tick'被调用,但页面的UpdatePanels不会被更新。一旦计时器自行嘀嗒一声 - 一切正常。此外,“脚本块”文件正在建立,在Visual Studio中显示。运行几分钟后,应用程序挂起。奇怪... – toy4fun 2012-03-16 14:06:14