2012-03-15 37 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