我有以下菜单:
<header class="logged-in clearfix" runat="server" id="hdrLoggedIn" visible="false">
<div class="container">
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li runat="server" ID="liLoggedIn"><asp:LinkButton runat="server" ID="btnLoggedIn" OnClick="btnLoggedIn_Click" CausesValidation="false" /></li>
<li runat="server" ID="liChangePwd"><asp:LinkButton runat="server" ID="btnChangePwd" Text="Change Password" OnClick="btnChangePwd_Click" CausesValidation="false" /></li>
<li runat="server" ID="liIdUpload"><asp:LinkButton runat="server" ID="btnIdUpload" Text="ID Upload" OnClick="lnkIdUpload_Click" CausesValidation="false" /></li>
<li runat="server" ID="liAdmin"><asp:LinkButton runat="server" ID="btnAdmin" Text="Admin" OnClick="btnAdmin_Click" CausesValidation="false" /></li>
<li runat="server" ID="liLogout"><asp:LinkButton runat="server" ID="btnLogout" Text="Logout" OnClick="btnLogout_Click" CausesValidation="false" /></li>
<li runat="server" ID="liUnsub"><a href="unsubscribe.aspx">Unsubscribe User</a></li>
<li runat="server" ID="liPerfMon"><a href="adminmonitor.aspx">Performance Monitor</a></li>
</ul>
</div>
</div>
</header>
这在开发人员工具中:
这让我相信asp.net正在添加_doPostBack
函数(除非我遗漏了一些内容,因为我没有提供此应用程序)。
这是在母版页中声明的全局标题菜单。
我的问题是,菜单在除一个特定页面之外的所有页面上都能正常工作。
我尝试在Response.Write
方法中添加onClick
,但这不会被触发,这让我相信onClick
没有被解雇。
如果它没有被解雇,似乎最明显的可能性是_doPostBack
以某种方式失败并阻止onClick
方法被解雇?
如果是这种情况,或者听起来对任何人都有意义,为什么会发生这种情况,我该怎么做才能解决它。
页面中的某些内容可能无效或与_doPostBack
冲突?或其他什么?
有什么想法吗?
答案 0 :(得分:1)
分配OnClick
属性时,为目标控件的Click
事件分配事件处理程序。因此,在您的示例中,我假设您已在代码中实现了服务器方法btnChangePwd_Click
。要触发此方法,必须使用POST方法将呈现的页面发送到服务器 - 您的页面上有表单。因为asp:LinkButton
在结果HTML中呈现为a
元素,并且此元素不会触发表单的发布,所以ASP.NET呈现特殊帮助方法__doPostBack
这是一个简单的javascript函数,获取其输入参数(输入参数是触发回发的元素的id)将此参数设置为表单中隐藏字段的值,然后发送表单。在服务器端,根据输入参数中提供的值,.NET知道应该调用哪个服务器函数。
因此,如果您的菜单仅在某个特定页面上不起作用,请检查页面上是否存在某些javascript错误,或者呈现的某些不匹配的html代码,这可能会破坏所有这些逻辑。