【问题标题】:LinkButton does not fire postbackLinkBut​​ton 不会触发回发
【发布时间】:2014-02-13 02:05:21
【问题描述】:

我有一个链接按钮,单击时不知何故不会回发。这是代码

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

我尝试将断点放在代码隐藏中,但它没有命中。页面也没有刷新。如果我使用&lt;asp:Button&gt;,那么它会提交,一切似乎都很好。 我也试着看看是否有多个&lt;form&gt;标签,但没有。 我还确保在 aspx 页面中,那些点击事件是绑定的。

[编辑]:链接按钮位于 jquery 选项卡内。因此,我没有使用不做任何回发的 jquery 示例中的普通 &lt;a href...,而是使用了 asp linkbutton 并想要回发。

有什么想法吗?

【问题讨论】:

  • 点击事件不会对他们三个都触发还是仅对TabLink1触发?
  • @ekad 都不起作用
  • 或者这三个链接按钮可能在&lt;form&gt; 标签之外?
  • @ekad 我已经重建了项目,它是一样的。这三个链接按钮在表单标签内。
  • 它也不起作用:(

标签: asp.net linkbutton


【解决方案1】:

以防其他人在寻找。 LinkBut​​ton OnClick 事件未触发时我遇到了同样的问题,并通过简单地使用“OnCommand =”而不是“OnClick =”来修复它。

【讨论】:

  • 没有为我做任何事情,同样的行为
  • 谢谢!我在 VB.Net 中使用了 AddHandler,这就是为我修复它的原因
【解决方案2】:

找到了一些解决方法。我在&lt;div id="divTabs"&gt; 之外定义了另一个链接按钮,&lt;div id="divTabs"&gt; 内部的链接按钮将调用外部链接按钮。所以代码就变成了

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

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

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

    【讨论】:

    • 试过了,但是不行。我将断点放在函数(SelectTopBar)的开头,它没有被调用。所以 Response.Redirect 也不会被调用。
    【解决方案4】:

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

    使用 CausesValidation="false"

    【讨论】:

      【解决方案5】:

      如果有人在寻找真正有效的解决方案,那是因为您以某种方式摆弄 javascript,而这会覆盖 .NET 回发行为。

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

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

      这已被 Bootstrap JavaScript 识别,因为它需要观察组中的这些按钮才能正确显示其切换状态(即向子级添加/删除“活动”类)。

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

      【讨论】:

        【解决方案6】:

        也许是 .NET 框架的错, 对我来说,__doPostBack 并非在所有页面中都有效,因为我使用较新版本的 Visual Studio 编译了我的项目。我将“目标框架”从“.NET 框架 4.0”更改为“.NET 框架 3.0”,然后重建项目并且它已经工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-31
          • 1970-01-01
          • 2013-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多