如何从无序列表项调用代码隐藏代码
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
,然后重定向到另一个页面。
请帮我解决问题
li 元素 - 即使使用 runat="server" - 仍然是 HTML 元素。当您使用该元素的 onclick-Attribute 时,它会将其视为对客户端 JavaScript-函数(未定义)的调用。
后面的代码是服务器端的,无法从 HTML 个元素执行。您需要 ASP 个元素才能正常工作。
您 ASP.NET 代码中的 logout_Click
方法在服务器上是 运行。 li
标签上的 onclick
属性引用了一个名为 logout_Click
的 JavaScript 函数,它在客户端上是 运行。
为了运行服务器上的代码,您需要对服务器进行回发。要对此进行测试,您可以按如下方式更改您的 ASPX 代码(这可能会引入一些您必须在之后修复的设计更改):
<li id="liDrop">
<asp:LinkButton runat="server"
OnClick="logout_Click"
Text="LogOut" />
</li>
这会添加一个 LinkButton 回发到服务器的控件,这样 logout_Click
方法就是 运行。
我更喜欢 Marcus 的回答(添加服务器控件 "LinkButton")。但是如果您想保留您的 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();
}
<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
,然后重定向到另一个页面。
请帮我解决问题
li 元素 - 即使使用 runat="server" - 仍然是 HTML 元素。当您使用该元素的 onclick-Attribute 时,它会将其视为对客户端 JavaScript-函数(未定义)的调用。
后面的代码是服务器端的,无法从 HTML 个元素执行。您需要 ASP 个元素才能正常工作。
您 ASP.NET 代码中的 logout_Click
方法在服务器上是 运行。 li
标签上的 onclick
属性引用了一个名为 logout_Click
的 JavaScript 函数,它在客户端上是 运行。
为了运行服务器上的代码,您需要对服务器进行回发。要对此进行测试,您可以按如下方式更改您的 ASPX 代码(这可能会引入一些您必须在之后修复的设计更改):
<li id="liDrop">
<asp:LinkButton runat="server"
OnClick="logout_Click"
Text="LogOut" />
</li>
这会添加一个 LinkButton 回发到服务器的控件,这样 logout_Click
方法就是 运行。
我更喜欢 Marcus 的回答(添加服务器控件 "LinkButton")。但是如果您想保留您的 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();
}