0

다음 설정을 사용하면 대리인/이벤트 핸들러를 변경하면 업데이트 패널에 레이블 텍스트 변경 사항이 반영되지 않는 이유는 무엇입니까? 어떻게 작동 시키시겠습니까?위임자가 함수를 호출하면 UpdatePanel에 변경 사항이 적용되지 않습니다.

에서 Test.aspx :

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Test</title> 
</head> 
<body style="text-align: center"> 
    <form id="form1" runat="server"> 
    <ajaxToolkit:ToolkitScriptManager runat="server" ID="ToolkitScriptManager1" EnableScriptGlobalization="true" 
     EnableScriptLocalization="true" /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Label ID="Label1" runat="server" Text="Example label"></asp:Label> 
      <asp:Button ID="btnChange" OnClick="btnChange_Click" runat="server" Text="Change"> 
      </asp:Button> 
      <table id="tableMessage" runat="server" style="display: none" > 
       <tr> 
        <td> 
         <asp:Label ID="lb5" runat="server" Text="Warning"></asp:Label> 
        </td> 
       </tr> 
       <tr> 
        <td > 
         <asp:Label ID="lbMessage" runat="server"></asp:Label><br /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Button ID="btnOk" runat="server" AccessKey="a" Font-Bold="True" Text="Ok" 
          Width="125px" OnClick="btnOk_Click" /> 
         <asp:Button ID="btnCancel" runat="server" AccessKey="C" Font-Bold="True" Text="Cancel" 
          Width="125px" OnClick="btnCancel_Click" /> 
        </td> 
       </tr> 
      </table> 
      <asp:Button ID="btnOKError" runat="server" Text="OK" Style="display: none" /> 
      <ajaxToolkit:ModalPopupExtender 
       ID="ModalPopupMessage" runat="server" TargetControlID="btnOKError" PopupControlID="tableMessage" 
       OkControlID="btnOKError" CancelControlID="btnOKError" DropShadow="true"> 
      </ajaxToolkit:ModalPopupExtender> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

Test.aspx.cs :

using System; 
using System.Web.UI; 
using AsistenciasCapadatos; 

public partial class Test : Page 
{ 

    private EventHandler OkButtonClick 
    { 
     get { return SessionActual.Get<EventHandler>("OkButtonClick"); } 

     set { SessionActual.Set("OkButtonClick", value); } 
    } 


    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void btnChange_Click(object sender, EventArgs e) 
    { 
     MessageConfirm("Do you want to change label?", btnChange1_Click); 
    } 
    protected void btnChange1_Click(object sender, EventArgs e) 
    {//the text property changes correctly but the updatepanel doesnt reflect it...viewstate ajax bug? 
     Label1.Text = "Change1"; 
    } 
    protected void btnChange2_Click(object sender, EventArgs e) 
    { 
     Label1.Text = "Change2"; 
    } 


    protected void btnOk_Click(object sender, EventArgs e) 
    { 
     //Label1.Text = "Change1"; //this way works 
     OkButtonClick.Invoke(sender, e); //this doesnt 
    } 
    protected void btnCancel_Click(object sender, EventArgs e) 
    { 

    } 

    public void MessageConfirm(string message, EventHandler btnclick) 
    { 
     OkButtonClick = btnclick; 
     lbMessage.Text = message; 
     ModalPopupMessage.Show(); 
    } 
} 
+0

는 난을 Label1에 시계를 추가하는 경우 . 텍스트 그 값이 btnChange1_Click 내부에서 어떻게 변하는 지 알지만 그 값은 btnOk_Click : S로 돌아갈 때 원본으로 돌아갑니다. 이론적으로 그들은 같은 스레드 안에 있습니다. 그래서 무슨 일이 일어 났습니까? – VSP

답변

2

결국 나는 그것을 다음 라인을 변경 해결 :

,
Page.GetType().InvokeMember(OkButtonClick.Method.Name, BindingFlags.InvokeMethod, null, Page, new []{sender, e}); //this works 
//OkButtonClick.Invoke(sender, e); //this doesnt 

하지만 난 그것을 이런 식으로 작동합니까 왜 사람이 그것을 설명 할 수 있다면 나는 그에게 대답을 부여 할 수 있도록 ... 알고 싶다/그녀는 대신에 ...

0

은 .. 유 btnChange_Click 호출이 완료 될 때 OkButtonClick 무엇을 얻을 값 디버깅을 시도했다

(new EventHandler(btnChange1_Click)).Invoke(sender, e); //this should work 
+0

btnChange_Click의 끝에는 btnChange1_Click이 할당되고 btnOk_Click에는 btnChange1_Click이 할당 될 때 btnOk_Click에 할당됩니다. – VSP

+0

btnChange1_Click에 직접 호출하기 때문에 코드를 작성하면 함수에 전달 된 처리기/위임자와 함께 작동하게됩니다. – VSP