如何从无序列表项调用代码隐藏代码

时间:2015-11-11 15:13:36

标签: c# asp.net drop-down-menu code-behind

<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");
}

它一直给我一个错误,找不到该功能。

我希望清除asp.net页面中的所有会话设置&#34; Logout&#34;单击,不仅是文本,还有整个LI并重定向到另一个页面。

请帮我解决问题

3 个答案:

答案 0 :(得分:2)

我更喜欢Marcus的回答(添加服务器控件&#34; LinkBut​​ton&#34;)。但是如果你想保留你的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();
}

答案 1 :(得分:1)

ASP.NET代码中的logout_Click方法在服务器上运行。 onclick标记上的li属性是指在客户端上运行的名为logout_Click的JavaScript函数。

为了在服务器上运行代码,您需要对服务器执行PostBack。要对此进行测试,您可以按如下方式更改ASPX代码(这可能会引入一些您之后必须修改的设计更改):

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

这会添加一个LinkButton控件,该控件会回发到服务器,以便运行logout_Click方法。

答案 2 :(得分:0)

li元素 - 即使使用runat =&#34; server&#34; - 仍然是一个HTML元素。当您使用该元素的onclick-Attribute时,它会将其视为对客户端JavaScript函数的调用(未定义)。

后面的代码是服务器端,无法从HTML元素执行。你需要ASP元素才能工作。