2009-07-13 3 views
1

PlaceHold가 포함 된 UpdatePanel이 있습니다. 레이블 및 단추를 사용하여 일부 컨트롤을 만듭니다. Button을 클릭하면 PlaceHolder를 지우는 이벤트가 발생하고 일부 텍스트 상자와 이벤트가있는 단추가 추가됩니다. 이 버튼을 클릭하면 포스트 백을 수행하는 것처럼 보이며 버튼과 연결된 이벤트가 발생하지 않습니다. 나는이 컨트롤들이 모두 UpdatePanel에 포함되어 있기 때문에 PostBack이 아니기 때문에 그 흐름을 놓쳤다 고 생각했다.버튼 이벤트가 실행되지 않는 UpdatePanel

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 

<%--<%@ Register assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" namespace="System.Web.DynamicData" tagprefix="cc1" %> 
--%> 

<div id="content" > <!--start content div--> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <br /> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <br /> 
    <asp:UpdatePanel ID="upBlog" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate > 

     <asp:PlaceHolder ID="phBlog" runat="server"></asp:PlaceHolder> 
    </ContentTemplate> 
    <Triggers > 
<%-- <asp:AsyncPostBackTrigger EventName="Click" ControlID = "btnSave" />--%> 
    </Triggers> 
    </asp:UpdatePanel> 
    <br /> 
</div> <!--ends content div--> 

</asp:Content> 

UpdatePanel 여전히 포스트 백을 수행

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    FirstView(); 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 

private void FirstView() 
{ 
    FileStream fs = new FileStream(Server.MapPath(GlobalVar.compathver), FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
    DataSet dset = new DataSet(); 
    dset.ReadXml(fs); 
    fs.Close(); 
//other controls 
     Button btnComments = new Button(); 
     btnComments.ID = "mybtnComments" + i.ToString(); 
     btnComments.BorderWidth = 0; 
     btnComments.Text = MyFunc.CountComments(row["ID"].ToString(), dset) + " Comments"; 
     phBlog.Controls.Add(btnComments); 
     btnComments.CommandArgument = row["ID"].ToString(); 
     btnComments.BorderWidth = 0; 

     btnComments.Command += new CommandEventHandler(Button1_Click) 

} 


private void CommentView(string ID) /// THIS DOES not FIRE 
{ 
    DataView myCommentView = GetCommentView(ID); 

     Button btnCommentSave = new Button(); 
     btnCommentSave.ID = "mySavebtnComments" + i.ToString(); 
     btnCommentSave.Text = "Publish"; 
     btnCommentSave.BackColor = Color.Aquamarine; 
     phBlog.Controls.Add(btnCommentSave); 
     btnCommentSave.CommandArgument = row["ID"].ToString(); 
     btnCommentSave.Click += new EventHandler(btnSave_Click); 


} 




protected void Button1_Click(object sender, CommandEventArgs e) 
{ 
    CommentView(e.CommandArgument.ToString()); 
} 

protected void btnSave_Click(object sender, EventArgs e) 
//protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    FileStream fsxml = new FileStream(Server.MapPath(GlobalVar.compathver), FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite); 

    //other code 
    // XML Document Saved 
    xmldoc.Save(fsxml); 
} 
+0

마크 업의 예를 게시 할 수 있습니까? –

답변

0

뒤에 // 코드입니다. 버튼을 클릭하면 전체 페이지 수명주기가 반복되므로 예를 들어 Page_Init 및 Page_Load가 다시 실행됩니다. AJAX는 우편함을 제거하지 않고 단지 클라이언트에서 숨 깁니다.

내가 게시 한 코드에 분명히 잘못된 것이 보이지 않을 수도 있지만 처음에는 Page_Init에 중단 점을 배치하는 것이 좋습니다. 이렇게하면 포스트 백이 실제로 발생했는지 여부를 알 수 있습니다. 버튼이 실제로 버튼 클릭 이벤트를 발생 시키려고 시도하면이 이벤트가 발생하기 때문입니다. 모든 클릭 이벤트는 페이지 수명주기가 완료된 후에 발생합니다 (이론적으로).

두 번째로 보면 FirstView() 메서드의 Button 이벤트를 Click이 아닌 Command로 변경하고이 이벤트가 트리거되는지 확인하는 것이 좋습니다.

+0

해결 방법, 코드 등을 입력하십시오.이 문제를 해결하는 방법. [내 질문] (http://stackoverflow.com/questions/18042263/link-button-click-event-does-not-fire-in-update-panel)에서보십시오 당신이 제발 대답 할 수 있는지 참조하십시오 –

0

다른 컨테이너에 컨트롤을 추가하기 전에 컨트롤에 이벤트를 추가하는 것이 좋습니다.

두 번째로 매개 변수 이름이 "btnCommentSave"인 버튼이 작동하지 않습니다. OnInit, OnLoad 이벤트에주의해야합니다. 그것은 서버 클라이언트 쪽 문제입니다. 서버에서 클라이언트로 푸시 된 페이지에는 "btnCommentSave"버튼이 없으므로이 버튼은 클라이언트 페이지에 유지되지만 작동하지는 않습니다.

btnComments는 UpdatePanel의 OnLoad 함수에서 클라이언트로 푸시하기 전에 서버에 의해 렌더링되기 때문에 작동합니다.

OnLoad 함수 후에 렌더링되는 함수가 작동하지 않습니다.

관련 문제