2014-02-04 6 views
0

У меня есть события onclientclick и onclick, написанные для кнопки «Выход» на моей веб-странице. При щелчке сначала следует выполнить инструкцию обновления, а затем закрыть окно.C# onclick и onclientclick в то же время

<asp:Button ID="ExitButton" runat="server" OnClientClick="javaScript:self.close(); return false;" OnClick="ExitButton_Click" UseSubmitBehavior="false" Text="Exit" Width="102px" CssClass="CssStyle2" Height="29px" /> 

protected void ExitButton_Click(object sender, EventArgs e) 
{ 
    string sqlUpd = @"UPDATE top (2) [db1].[TestTable] set flag=0 
        where Date is null and flag=-1"; 
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString)) 
    { 
     connection.Open(); 
     SqlCommand cmdUpd = new SqlCommand(sqlUpd, connection); 

     try 
     { 
      Int32 rows = cmdUpd.ExecuteNonQuery(); 
      connection.Close(); 
     } 
     catch (Exception eupd) 
     { 
      lblUpdateErr.Text = "Error occurred in update"; 
     } 
    } 
} 

Onclientclick запускает, но не onclick i.e. записи не обновляются. Есть ли способ сделать это?

Благодаря Rashmi

+0

так, можете ли вы предложить другой способ обновления до выхода? – Rashmi

+0

http://stackoverflow.com/questions/9619395/onclick-not-working-when-i-use-both-onclick-onclientclick – Wolf

+1

выше будет объяснять, как вы можете выполнить то, что вы хотите, изменив свой onclientclick немного, это будет вы можете использовать onclick и onclientclick одновременно вместе на кнопке. Я надеюсь, что это помогло, если бы я опубликовал его как ответ, просто отметьте его, пожалуйста, дайте мне знать, если он работает – Wolf

ответ

2

OnClientClick выполняется перед постбэк происходит. Обычно он используется для таких вещей, как проверка на стороне клиента, где вам нужно предотвратить повторную передачу, используя return false. Поскольку вы всегда возвращаетесь из обработчика, postback никогда не будет выполняться, и поэтому обработчик на стороне сервера также не будет вызван.

Вы должны удалить OnClientClick свойства и вместо того, чтобы вызвать эту строку в стороне сервера обработчика:

ScriptManager.RegisterStartupScript(this, this.GetType(), "windowclose", "self.close();", true); 

Это вызовет окно будет закрыто после того, как постбэк выполняется и результат возвращается в браузер. Это также означает, что если обновление заканчивается исключением, окно не закрывается.

+0

Хорошее объяснение !! Благодарю. – Rashmi

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