LinkBut​​ton不会触发回发

时间:2014-02-13 02:05:21

标签: asp.net linkbutton

我有一个链接按钮,在点击时不会给出回复。这是代码

<script type="text/javascript">
    $(function () {
        $('#divTabs').tabs({
            show: function () {
                var sel = $('#divTabs').tabs('option', 'selected');
                $('#<%= hfLastTab.ClientID %>').val(sel);
            },
            selected: '<%= hfLastTab.Value %>'
        });
    });
</script>

<div id="divTabs">
    <ul>
        <li runat="server" id="TabBar1" ><asp:LinkButton ID="TabLink1" runat="server" OnClick="TabLink1_Click" >&nbsp;Link1&nbsp;</asp:LinkButton></li>
        <li runat="server" id="TabBar2" ><asp:LinkButton ID="TabLink2" runat="server" OnClick="TabLink2_Click">&nbsp;Link2&nbsp;</asp:LinkButton></li>
        <li runat="server" id="TabBar3" ><asp:LinkButton ID="TabLink3" runat="server" OnClick="TabLink3_Click">&nbsp;Link3&nbsp;</asp:LinkButton></li>
    </ul>
    ....
</div>

背后的代码:

protected void TabLink1_Click(object sender, System.EventArgs e)
{
    SelectTopBar();
    SetSelectTab("TabBar1");
}

protected void TabLink2_Click(object sender, System.EventArgs e)
{
    SelectTopBar();
    SetSelectTab("TabBar2");
}

protected void TabLink3_Click(object sender, System.EventArgs e)
{
    SelectTopBar();
    SetSelectTab("TabBar3");
}

我尝试将断点放在代码隐藏中并且没有命中。该页面也不会刷新。如果我使用<asp:Button>,那么它将进行提交,一切似乎都没问题。 我还试图查看是否有多个<form>标签,但没有。 我还确保在aspx页面中,这些点击事件是相互关联的。

[编辑]:链接按钮位于jquery选项卡内。因此,不使用jquery示例中的普通<a href...,而不使用任何回发,我使用了asp linkbutton并希望回发。

有什么想法吗?

6 个答案:

答案 0 :(得分:1)

万一其他人在寻找。 LinkBut​​ton OnClick事件没有触发时遇到了同样的问题,只需使用“OnCommand =”而不是“OnClick =”修复它。

答案 1 :(得分:0)

您是否尝试将responseredirect包含为每个事件的最后一行,如下例所示?

  protected void TabLink1_Click(object sender, System.EventArgs e)
{
   SelectTopBar();
   SetSelectTab("TabBar1");
   Response.Redirect(Request.Url.AbsoluteUri);


}

答案 2 :(得分:0)

找到一些解决方法。我在<div id="divTabs">之外定义了另一个链接按钮,<div id="divTabs">内的链接按钮将调用外部链接按钮。所以代码变得像

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="TabLink1_Click" ></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="TabLink2_Click" ></asp:LinkButton>
<asp:LinkButton ID="LinkButton3" runat="server" OnClick="TabLink3_Click" ></asp:LinkButton>

<div id="divTabs">
    <ul>
        <li runat="server" id="TabBar1" ><asp:LinkButton ID="TabLink1" runat="server">&nbsp;Link1&nbsp;</asp:LinkButton></li>
        <li runat="server" id="TabBar2" ><asp:LinkButton ID="TabLink2" runat="server">&nbsp;Link2&nbsp;</asp:LinkButton></li>
        <li runat="server" id="TabBar3" ><asp:LinkButton ID="TabLink3" runat="server">&nbsp;Link3&nbsp;</asp:LinkButton></li>
    </ul>
    ....
</div>

在后面的代码中,在Page_Load函数

TabLink1.OnClientClick = "document.getElementById('" + LinkButton1.ClientID + "').click();";
TabLink2.OnClientClick = "document.getElementById('" + LinkButton2.ClientID + "').click();";
TabLink3.OnClientClick = "document.getElementById('" + LinkButton3.ClientID + "').click();";

我猜测jQuery库可能会产生一些影响,导致链接没有调用回发,所以我使用上面的解决方法。

答案 3 :(得分:0)

&#13;
&#13;
<script type="text/javascript">
    $(function () {
        $('#divTabs').tabs({
            show: function () {
                var sel = $('#divTabs').tabs('option', 'selected');
                $('#<%= hfLastTab.ClientID %>').val(sel);
            },
            selected: '<%= hfLastTab.Value %>'
        });
    });
</script>

<div id="divTabs">
    <ul>
        <li runat="server" id="TabBar1" ><asp:LinkButton ID="TabLink1" CauseValidation="false" runat="server" OnClick="TabLink1_Click" >&nbsp;Link1&nbsp;</asp:LinkButton></li>
        <li runat="server" id="TabBar2" ><asp:LinkButton ID="TabLink2" runat="server" CauseValidation="false" OnClick="TabLink2_Click">&nbsp;Link2&nbsp;</asp:LinkButton></li>
        <li runat="server" id="TabBar3" ><asp:LinkButton ID="TabLink3" runat="server" CauseValidation="false" OnClick="TabLink3_Click">&nbsp;Link3&nbsp;</asp:LinkButton></li>
    </ul>
    ....
</div>
&#13;
&#13;
&#13;

使用CausesValidation =&#34; false&#34;

答案 4 :(得分:0)

如果有人在寻找实际可行的解决方案,那是因为你在某种程度上摆弄了javascript并且这会覆盖.NET回发行为。

在我的情况下,它只是使用Bootstrap并将data-toggle="buttons" e.markup添加到按钮组,如:

<div class="btn-group btn-group-sm btn-group-justified" data-toggle="buttons">

Bootstrap JavaScript认可了这一点,因为它需要在组中观察这些按钮才能正确显示其切换状态(即向/从子级添加/删除“活动”类)。

解决方案:删除了数据切换,并使用一些C#内联代码实现了切换状态突出显示。

答案 5 :(得分:-1)

也许这是.NET框架的错, 对我来说__doPostBack并不适用于所有页面,因为我使用较新版本的Visual Studio编译了我的项目。我改变了#34;目标框架&#34;来自&#34; .NET framework 4.0 &#34;到&#34; .NET framework 3.0 &#34;,然后在那个重建项目之后就已经有效了。