asp:按钮单击事件不会触发

时间:2012-09-20 06:25:38

标签: javascript asp.net button onclick

我正在开发这个网站的问题。我试图在外部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事件。
  5. 我刚刚用这个按钮,因为我不知道我还有其他选择。

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

    enter image description here

    编译器遍历btn.click()行,该行应该从代码隐藏中触发btnRefresh_Click事件。但是,它并没有激发。

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

5 个答案:

答案 0 :(得分: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');
        }
    }

答案 1 :(得分:0)

您正在设置按钮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>

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

客户端的

onclick等于服务器端的OnClientClick。

更新

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

如果你不想显示按钮,而不是设置Visible =“False”,你可以写Style =“visibility:hidden”;

因此,按钮的aspx标记应如下所示

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

答案 4 :(得分:0)

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