簡體   English   中英

如何從代碼后面調用回發?

[英]how do I invoke a post-back from code behind?

我的用戶控件在“回發時間軸”中加載太晚,我遇到了問題,因為它們是由於自定義事件而加載的。

因此,第一次單擊時不會觸發此用戶控件上的按鈕單擊事件(整個回發僅發生單擊的事件處理程序不會被引發)。 然而,在第二次單擊(因此第二次后退)時,事件處理程序工作正常。

如何在剛完成后立即自動調用第二個回復? 所以我的usercontrol正確加載。

默認頁面

public interface IEventProvider
{
    void TriggerEvent(String path);
}


public partial class Default : System.Web.UI.Page, IEventProvider
{
    private string LastLoadedControl
    {
        get
        {
            return Session[Paths.CURRENTCTRL] as string;
        }
        set
        {
            Session[Paths.CURRENTCTRL] = value;
        }
    }

    private void LoadUserControl()
    {
        string controlPath = LastLoadedControl;

        ContentPlaceholder.Controls.Clear();

        if (string.IsNullOrEmpty(controlPath))
            controlPath = Utils.Paths.USERCTRL_BASE + "Main.ascx";

        Control uc = Page.LoadControl(controlPath);
        ContentPlaceholder.Controls.Add(uc);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        LoadUserControl();
    }

    public void TriggerEvent(String path)
    {
        if (path.Equals("logout"))
        {
            Session.Clear();
            Session.Abandon();
            LastLoadedControl = null;
        }
        else LastLoadedControl = Paths.USERCTRL_BASE + path + ".ascx";
        LoadUserControl();
    }
}

用戶控制代碼

protected void profileBtn_Click(object sender, EventArgs e)
    {
        Utils.Events.triggerRedirectPage(this.Page, "Login");
    }

事件代碼

 public static void triggerRedirectPage(Page p, String path)
    {
        IEventProvider eventProvider = p as IEventProvider;
        if (eventProvider != null)
            eventProvider.TriggerEvent(path);
    }

您可以使用AllowPostBack=true添加按鈕(或其他控件),然后在此按鈕上觸發單擊事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM