【问题标题】:asp:Button Click Event doesn't fireasp:按钮单击事件不会触发
【发布时间】:2012-09-12 11:49:12
【问题描述】:

我目前正在开发的这个网站有问题。我试图在外部 js 文件中的一系列代码之后触发按钮的 Click 事件。请在下面查看我的代码:

.ASPX:

<script type="text/javascript">
    var btn = $("#<%=btnRefresh.ClientID%>");
</script>

...

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false" Text="btnRefresh" onclick="btnRefresh_Click" />

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <asp:GridView ID="myGrd" runat="server">...</GridView>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="btnRefresh" EventName="Click" />
    </Triggers>
<asp:UpdatePanel>

.ASPX.CS:

protected void btnRefresh_Click(object sender, EventArgs e)
{
    myGrd.DataSource = null;
    myGrd.DataSource = GetData();
    myGrd.DataBind();
}

.JS:

function Refresh() {
    if (btn) {
        btn.click();
    }
    else {
        alert('false');
    }
}

基本上,我想要实现的是:

  1. 能够在页面上实现我的添加、编辑、删除。 (正在运行)
  2. 调用外部 JS 文件中的方法以显示添加、编辑、删除的弹出框。
  3. 成功后,调用Refresh() 方法并仅刷新gridview。
  4. Refresh() 方法使用来自 .aspx.cs 页面的 btnRefresh_Click 事件。

我只是为此目的使用了该按钮,因为我不知道我还有什么其他选项。

现在我的问题是这个。我的代码能够从 .aspx 页面声明我的 btn 变量。当它在外部 .js 文件中执行时,我的 btn 变量如下所示:

编译器通过btn.click() 行,该行应该从代码隐藏中触发btnRefresh_Click 事件。但是,它不会启动。

我在这里遗漏了什么吗?请帮我。我已经被困在这里好几个小时了。

【问题讨论】:

  • 当您在 aspx 页面中初始设置 Visible = "True" 时是否有效?
  • 是的,当我单击按钮时它会起作用。但是,我希望在不单击按钮的情况下刷新我的网格视图。

标签: javascript asp.net button onclick


【解决方案1】:

您是否尝试过在需要时和文档完全加载后查找 btn 对象,而不是在文档完全加载之前获取它?

改变:

<script type="text/javascript">
    var btn = $("#<%=btnRefresh.ClientID%>");
</script>

<script type="text/javascript">
    var btnid = "#<%=btnRefresh.ClientID%>";
</script>

还有你的 js:

   function Refresh() {
     var btn  = $(btnid);
        if (btn) {
            btn.click();
        }
        else {
            alert('false');
        }
    }

【讨论】:

  • &lt;script type="text/javascript"&gt; var btnid = "#&lt;%=btnRefresh.ClientID%&gt;"; &lt;/script&gt; 显然,这条线与众不同!!!现在可以了!谢谢!!!!
  • 感谢这位朋友。我现在明白了!我最初是在前面访问对象btn。加载文档后,我需要通过 id 访问对象。
【解决方案2】:

我会选择最简单的方法 - 问题不在于使按钮不可见,而是拥有一个不可见的按钮,可以从 javascript 中单击该按钮,并让该按钮调用它的事件处理程序。我和 OP 有同样的技巧: 通过设置它的 style=display:none; 使按钮永久不可见。 以这种方式,按钮存在于客户端页面上,我的 JS 单击它,然后服务器上的按钮事件处理程序在回发时被调用。在我设置 UseSubmitBehavior=False 之前,这在 Firefox 中无法正常工作。现在它可以在 IE 和 FF 中使用。

【讨论】:

  • 感谢您的回复。我已经尝试添加UseSubmitBehavior=False,但我仍然没有任何运气。我还尝试删除Visible="false" 并添加style="display:none",但事件仍然没有触发。 :(
  • 先去掉所有显示或可见的假属性,试试这样行吗?
  • 是的。我尝试删除所有可见的错误属性。在我的 gridview 上添加项目并单击按钮后,gridview 会刷新。它就是这样工作的。但我需要它在不单击按钮的情况下刷新。感谢您的帮助。
  • 使用 __dopostback("#");从javascript做回发
  • 但我的问题是我不能使用btnRefresh.UniqueID,因为我的 javascript 在外部文件中。我相信我也尝试过__dopostback(btn),但没有运气。
【解决方案3】:

您正在设置按钮Visible="false"

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false"

设置此不会在屏幕上呈现按钮。它将完全从标记中删除元素。因此不能附加任何事件。而不是这个尝试设置s**tyle="display:none" .. 这样做会在屏幕上呈现按钮但不会显示它.. 而且事件将附加到元素..

更新 ::: 尝试在 Document.Ready 函数中访问您的 btn。这可确保您在 DOM 中可用时添加按钮**

<script type="text/javascript">
   $(function() {
       var btn = $("#<%=btnRefresh.ClientID%>");
    });
</script>

如果可能,您能否提供整个标记和所需的代码。您在哪里调用刷新函数

【讨论】:

  • 感谢您的回复。我删除了我的Visible="false" 并添加了style="display:none",但事件仍然没有触发。 :(
【解决方案4】:

PostBackTrigger 更改 AsynPostBackTrigger 这应该可以工作

 <asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false"    Text="btnRefresh" onclick="btnRefresh_Click" />

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<asp:GridView ID="myGrd" runat="server">...</GridView>
<Triggers>
   <asp:PostBackTrigger ControlID="btnRefresh" EventName="Click" />
</Triggers>

【讨论】:

    【解决方案5】:

    我想您在客户端 onclick 看到的不是您在服务器端 OnClick 声明的那个。

    客户端的onclick等于服务器端的OnClientClick。

    更新:

    你仍然可以使用 btn.click() 调用服务器端的点击函数; (与您使用的相同),但要实现这一点,您必须首先将控件的 Visible 属性设置为 true。当您不将其设置为 true 时,控件甚至不会呈现给客户端,并且不会为其维护任何状态。

    如果您不想一开始就显示按钮,可以编写 Style="visibility:hidden"; 而不是设置 Visible = "False";

    所以,按钮的 aspx 标记应该是这样的

    <asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Style="visibility:hidden" Text="btnRefresh" onclick="btnRefresh_Click" />
    

    【讨论】:

    • 是的,我现在明白了。但是我不可能对服务器端的按钮单击事件进行客户端调用吗?这就是我想要实现的目标,但没有运气。
    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2016-04-25
    • 2019-06-22
    • 1970-01-01
    • 2020-02-20
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多