簡體   English   中英

如何從無序列表項調用代碼隱藏代碼

[英]How to call code-behind code from a unordered list item

<ul runat="server" id="ulDrop">
    <li>Update?</li>
    <li>
        <asp:DropDownList ID="yesno" ClientIDMode="Static" runat="server">
            <asp:ListItem>YES</asp:ListItem>
            <asp:ListItem>NO</asp:ListItem>
        </asp:DropDownList>
    </li>
    <li runat="server" id="liDrop" onclick="logout_Click"><span class="ondrop">Logout</span></li>
</ul>

我試圖從代碼隱藏的LI處理onclick方法,所以我添加了以下C#代碼:

public void logout_Click(object sender, EventArgs e)
{
    Session.RemoveAll();
    Response.Redirect("log-in.aspx");
}

它一直給我一個錯誤,無法找到該功能。

我希望在點擊“Logout”時清除asp.net頁面中的所有會話集,而不僅僅是文本而是整個LI並重定向到另一個頁面。

請幫我解決這個問題

我更喜歡Marcus的答案(添加服務器控件“LinkBut​​ton”)。 但是如果你想保留你的LI並仍然調用服務器端方法,作為解決方法你可以做如下:

在表單中添加隱藏按鈕。

<asp:button id="btnId" OnClick="logout_Click" style="display:none"></asp:button>

將你的LI改為

<li id="liDrop" onclick="logout();"><span class="ondrop">Logout</span></li>

使用Javascript

function logout()
{
   document.getElementById('<%= btnId.ClientID %>').click();
}

ASP.NET代碼中的logout_Click方法在服務器上運行。 li標記上的onclick屬性是指在客戶端上運行的名為logout_Click的JavaScript函數。

為了在服務器上運行代碼,您需要對服務器執行PostBack。 要對此進行測試,您可以按如下方式更改ASPX代碼(這可能會引入一些您之后必須修復的設計更改):

<li id="liDrop">
     <asp:LinkButton runat="server" 
                    OnClick="logout_Click" 
                    Text="LogOut" />
</li>

這會添加一個LinkBut​​ton控件,該控件會回發到服務器,以便運行logout_Click方法。

li元素 - 即使使用runat =“server” - 仍然是一個HTML元素。 當您使用該元素的onclick-Attribute時,它會將其視為對客戶端JavaScript函數(未定義)的調用。

后面的代碼是服務器端,不能從HTML元素執行。 您需要ASP元素才能工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM