ASP / C# - UpdatePanel和按钮OnClick事件未触发

时间:2015-03-19 19:54:18

标签: javascript c# asp.net updatepanel

我一直试图找到解决方案,但如果有人可以看看会很棒。

在我的aspx页面和C#代码隐藏中,我有以下内容:

ASPX:

<asp:UpdatePanel runat="server" ID="UpdatePanel8" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnAddTableRow" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <div id="divDynamicFields" runat="server"></div>
    </ContentTemplate>
</asp:UpdatePanel>

<div hidden>
    <asp:Button ID="btnAddTableRow" runat="server" OnClick="AddTableRow" />
</div>

<script type="text/javascript">
    function addTableRow(tableId) {
        $('#<%=btnAddTableRow.ClientID%>').click();
    }
</script>

C#:

protected void AddTableRow(object sender, EventArgs e)
{
    (...)
}

如果我没有使用UpdatePanel,则会触发事件,但是当使用UpdatePanel执行时,会有PostBack,但不会调用C#方法。我已经尝试了解它已经有一段时间没有用了。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

经过一夜安眠和清醒的心灵,我终于发现了什么是失败的。 JS函数addTableRow(tableId)实际上是由在Page_Load中动态创建的按钮调用的(这些按钮的数量不固定,因此将它们与此JS函数相关联,该函数单击从代码隐藏触发事件方法的隐藏按钮)。问题是,我是按照以下方式生成这些按钮的:

Button addRowButton = new Button();
addRowButton.Text = "This is my dynamically generated button";
addRowButton.Attributes.Add("onclick", "addTableRow('" + idControl + "')");

但是当我改为:

时,事情就开始起作用了
HtmlGenericControl addRowButton = new HtmlGenericControl("input");
addRowButton.Attributes.Add("type", "button");
addRowButton.Attributes.Add("onclick", "addTableRow('" + idControl + "');");
addRowButton.Attributes.Add("value", "This is my dynamically generated button");

实际上有点奇怪,因为用Button()创建的按钮仍然调用了JS函数addTableRows并导致了PostBack,但没有调用后面的代码方法。也许它与页面生命周期和生成的动态按钮的ID有关,这些动态按钮以不同的方式生成,具体取决于将它们创建为Button或HtmlGenericControl,但它现在正在以任何方式工作。

相关问题