asp LinkBut​​ton _doPostBack

时间:2015-09-22 07:53:41

标签: javascript c# asp.net

我有以下菜单:

<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>

这在开发人员工具中:

enter image description here

这让我相信asp.net正在添加_doPostBack函数(除非我遗漏了一些内容,因为我没有提供此应用程序)。

这是在母版页中声明的全局标题菜单。

我的问题是,菜单在除一个特定页面之外的所有页面上都能正常工作。

我尝试在Response.Write方法中添加onClick,但这不会被触发,这让我相信onClick没有被解雇。

如果它没有被解雇,似乎最明显的可能性是_doPostBack以某种方式失败并阻止onClick方法被解雇?

如果是这种情况,或者听起来对任何人都有意义,为什么会发生这种情况,我该怎么做才能解决它。

页面中的某些内容可能无效或与_doPostBack冲突?或其他什么?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

分配OnClick属性时,为目标控件的Click事件分配事件处理程序。因此,在您的示例中,我假设您已在代码中实现了服务器方法btnChangePwd_Click。要触发此方法,必须使用POST方法将呈现的页面发送到服务器 - 您的页面上有表单。因为asp:LinkButton在结果HTML中呈现为a元素,并且此元素不会触发表单的发布,所以ASP.NET呈现特殊帮助方法__doPostBack这是一个简单的javascript函数,获取其输入参数(输入参数是触发回发的元素的id)将此参数设置为表单中隐藏字段的值,然后发送表单。在服务器端,根据输入参数中提供的值,.NET知道应该调用哪个服务器函数。

因此,如果您的菜单仅在某个特定页面上不起作用,请检查页面上是否存在某些javascript错误,或者呈现的某些不匹配的html代码,这可能会破坏所有这些逻辑。