2

我有一个按钮,可以调用外部 url 以使用 OAuth 2 登录到会计程序(Xero)。收到令牌等后,按钮被隐藏并显示“断开连接”按钮。单击断开连接按钮后,它会被隐藏并再次显示连接按钮。问题是如果我再次单击“连接”按钮,在回发时它会再次执行“断开连接”按钮的代码,所以我永远不能重复第一个循环。“连接”按钮保持不变,所有断开连接代码再次运行。我试图捕获第一个按钮调用的回发,以便我可以告诉断开代码不要再次运行,但它始终为空。更糟糕的是,回发总是显示“断开连接” 按钮导致回发,即使它在页面上不再可见。我不明白它为什么这样做。这两个按钮都在“更新面板”内,以便我可以隐藏/显示它们。

这是按钮代码:

<asp:UpdatePanel runat="server">
     <ContentTemplate>
        <div class="row" id="XeroNotConnected2" runat="server" visible="false">
           <div class="col-sm-12 col-md-6">
                 <div class="form-group">
                     <label for="imgXero" class="col-sm-3 control-label"></label>
                        <div class="col-sm-9">
                           <asp:ImageButton runat="server" ID="imgXero" ImageUrl="~/assets/img/icons/connect-white.svg" OnClick="btnXeroConnect_Click" UseSubmitBehavior="False" />
                         </div>
                 </div>
       </div>
      </div>
          <div id="XeroConnected" runat="server" visible="false">
             <div class="row" >
                   <div class="col-sm-12 col-md-6">
                         <div class="form-group">
                              <label for="ddlTenants" class="col-sm-3 control-label">Select an Organization:</label>
                              <div class="col-sm-9">
         <asp:DropDownList runat="server" ID="ddlTenants" CssClass="form-control" AutoPostBack="true" OnSelectedIndexChanged="ddlTenants_SelectedIndexChanged"></asp:DropDownList>
                                     </div>
                                 </div>
                            </div>
                            </div>



                        </div>
                             <div id="XeroConnected2" runat="server" visible="false">
                                       <div class="row">
                                <div class="col-sm-12 col-md-6">
                                    <div class="form-group">
                                        <label for="btnDisconnect" class="col-sm-3 control-label"></label>
                                        <div class="col-sm-9">
                                             <button type="button" runat="server" class="btn btn-alt3" id="btnDisconnect" onclick="javascript:OpenModal('disconnectConfirm')"><i class="icon s7-plug"></i>&nbsp; Disconnect Xero</button>

                                        </div>

                                    </div>

                                </div>
                             </div>
                             </div>
                         </ContentTemplate>
                     </asp:UpdatePanel>

在 Page_Load 我有:

            if(IsPostBack)
        {
            Control pbControl = GetControlThatCausedPostBack(this.Page);
            if (pbControl != null)
            {
                if (pbControl.ID == "lnkDelete")
                {
                    InitiateConnect = false;
                }
            }
        }

用于获取导致回发的控制的方法是:

private Control GetControlThatCausedPostBack(Page page)
    {
        LoggerBA.Log(DB_Context, Path.GetFileName(Request.ServerVariables["SCRIPT_NAME"]), MethodBase.GetCurrentMethod().Name, UtilityBA.LoggerLevel.Debug, "method");

        //initialize a control and set it to null
        Control ctrl = null;

        //get the event target name and find the control
        string ctrlName = page.Request.Params.Get("__EVENTTARGET");
        if (!String.IsNullOrEmpty(ctrlName))
            ctrl = page.FindControl(ctrlName);

        //return the control to the calling method
        return ctrl;
    }

断开按钮中的代码是:

        protected void lnkDelete_Click(object sender, EventArgs e)
    {

        if(InitiateConnect == false)
        {
            InitiateConnect = true;
            PageAsyncTask t = new PageAsyncTask(DisconnectTenant);
            Page.RegisterAsyncTask(t);
            Page.ExecuteRegisteredAsyncTasks();
            Session.Remove("OAuthToken");
            Session.Remove("xeroToken");
            Session.Remove("Tenants");
            Session.Remove("xeroTenant");
            XeroConnected.Visible = false;
            XeroConnected2.Visible = false;
            btnDisconnect.Disabled = true;
            XeroNotConnected2.Visible = true;
            XeroNotConnected1.Visible = true;

        }

    }

非常感谢任何帮助。

4

0 回答 0