爲了得到更好的答案,你很多人想編輯你的問題,以更好地解釋你正在嘗試完成。
沒有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