简体   繁体   English

如何从代码后面调用回发?

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

I am having an issue with my usercontrol being loaded too late in the "post back timeline", because they are being loaded in as a result of a custom event. 我的用户控件在“回发时间轴”中加载太晚,我遇到了问题,因为它们是由于自定义事件而加载的。

As a result the button click events on this usercontrol don't fire on the first click (the entire post-back occurs only the event-handlers for the click don't get raised). 因此,第一次单击时不会触发此用户控件上的按钮单击事件(整个回发仅发生单击的事件处理程序不会被引发)。 On the second click (and hence second post-back), however, the event-handlers work fine. 然而,在第二次单击(因此第二次后退)时,事件处理程序工作正常。

How can I invoke a second post-back automatically right after one has just finished? 如何在刚完成后立即自动调用第二个回复? So my usercontrol gets loaded correctly. 所以我的usercontrol正确加载。

Default Page 默认页面

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();
    }
}

Usercontrol code 用户控制代码

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

events code 事件代码

 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