2017-09-18 18 views
3

部分更新が発生した後にaspボタンが起動しない原因は何ですか?Asp:更新パネル内のボタンクリックイベントが発射されない

<asp:UpdatePanel ID="upPan" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
    <asp:Button ID="btnSave" ClientIDMode="Static" runat="Server" Text="Save" CausesValidation="false" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
  • いずれかのボタンがこの順で更新パネルの内側に以下のルーチンの火を発射される初めて。
  • ポストバックが発生してボタンが再度ポストバックすると、LoadPreRenderCompleteの両方のイベントが発生しますが、クリックイベントはスキップされます。これを解決する

VB

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.PageLoad 
    //Runs everytime 
End Sub 

Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 
//Doesn't fire after first postback. 
End Sub 

Protected Sub Page_PreRenderComplete(sender As Object, e As EventArgs) Handles Me.PreRenderComplete 
    //Runs everytime 
End Sub 

FAILED決議

提案が含まれます:

  • ChildrenAsTriggers= "True" これは既にUpdatePanelのデフォルトの動作であり、変更はありません。
  • <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" /> また、デフォルトでは、パネルの子コントロールによって非同期ポストバックが発生し、トリガーの宣言が冗長になります。

SUCCESSFUL解決

私は単に問題が解決されasp:LinkButtonasp:Buttonを変更した場合。


概要

ポストバックが発生しているが、送信者がASPの場合にクリックイベントを見逃している:Buttonコントロール。

誰でもこの現象の原因を説明できますか?

+1

マークアップで 'OnClick =" btnSave_Click "'を設定してみてください。 – hardkoded

+0

https://stackoverflow.com/questions/25075538/button-click-not-working-inside-update-panel –

+0

@NikolaosPolygenis何か助けていただければ幸いですが、投稿した回答がうまくいかず、たとえ正しいものではない。 – Obsidian

答えて

1

まず、私の答えはC#です。私はあなたの問題を再現することができないので、それはあまり答えでもありません。 ButtonとLinkBut​​tonの違いは、Buttonは送信動作を使用し、LinkButtonはjavascriptポストバックを使用することです。ボタンにUseSubmitBehavior="false"を入れてみると、LinkButtonのように動作します。

ここに私の完全なテストコードがあります。

using System; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Test : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     txtBox.Text = "Page_Loaded"; 
    } 

    protected void btnSave_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += "\n" + DateTime.Now.ToString("mm:ss:fff"); 
    } 

    protected void Page_PreRenderComplete(object sender, EventArgs e) 
    { 
     txtBox.Text += "\nPreRenderComplete"; 
    } 
} 

クリック:たぶんC#とVBハンドルイベントなどの問題への鍵は若干異なる

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test3.aspx.cs" Inherits="Test3" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 

      <asp:ScriptManager ID="PageScriptManager" runat="server" /> 
      <asp:UpdatePanel ID="upPan" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <asp:Button ID="btnSave" ClientIDMode="Static" runat="Server" Text="Button" CausesValidation="false" OnClick="btnSave_Click" /> 
        <asp:LinkButton ID="lnkButton" ClientIDMode="Static" runat="Server" Text="Link Button" CausesValidation="false" OnClick="btnSave_Click" /> 
        <asp:TextBox ID="txtBox" runat="server" TextMode="MultiLine" Rows="3" /> 
       </ContentTemplate> 
      </asp:UpdatePanel> 

     </div> 
    </form> 
</body> 
</html> 

分離コード - ビーイングC#の私はそれがHandlesを持っていないとして、いくつかの変更をしなければなりませんでしたボタン(またはLinkBut​​ton)が動作し、毎回TextBoxを更新します。

Page_Loaded 
55:54:185 
PreRenderComplete 
+0

はいJavaScriptが競合しています。正しい方向に私を指してくれてありがとう。 – Obsidian

関連する問題