2015-03-19 3 views
0

Я пытался найти решение, но было бы здорово, если бы кто-то мог взглянуть.ASP/C# - UpdatePanel и кнопка OnClick Event Not Triggered

В моей страницы 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# не вызывается. Я пытался понять это в течение некоторого времени безрезультатно. Есть идеи? Спасибо.

+0

внутри вы пробовали добавлять '<жерех: PostBackTrigger ControlID =«btnAddTableRow»/>' – MethodMan

+0

Спасибо за комментарий, но я узнал и отправил решение. :) – aries23

ответ

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

Это на самом деле какое-то странное, так как кнопки, созданной с кнопкой() все еще вызывал функцию JS addTableRows и вызывал PostBack, но не вызывал метод кода позади. Возможно, это связано с жизненным циклом страницы и сгенерированными идентификаторами для динамических кнопок, которые генерируются по-разному в зависимости от их создания как Button или HtmlGenericControl, но в любом случае она работает сейчас.

Смежные вопросы