ASP.NET dynamiczne ładowanie kontrolki

0

Witam,
W mojej aplikacji ASP.NET ładuję dynamicznie na pewnej stronie kontrolki. Zależnie od wyboru przycisku na pewnym panelu ładowane są odpowiednie kontrolki. Robię to tak:

public partial class UserPanelLogin : System.Web.UI.UserControl
{
    public Panel PanelControl { get; set; }
    public UserControl ViewUCControl {get; set;}
    public QuestionnaireLib.User UserSelected { get; set; }
    private QuestionnaireLib.UserControl userCtrl = new QuestionnaireLib.UserControl();
    

    protected void Page_Load(object sender, EventArgs e)
    {
        if (userCtrl.IsLoggedUser() == false)
            Response.Redirect("Default.aspx");

        this.lblLogin.Text = "Login: " + UserSelected.Login;
        this.lblGroup.Text = "Grupa: " + UserSelected.Group.NameGroup;
    }

    private void LoadControlForPanel<T>(string nameFile)
        where T : UserControl
    {
        this.ViewUCControl = Page.LoadControl(nameFile) as T;
        this.PanelControl.Controls.Clear();
        this.PanelControl.Controls.Add(this.ViewUCControl);
    }

    public void LoadDefaultControl()
    {
        this.LoadControlForPanel<Controls_DataUserControl>("DataUserControl.ascx");
        ((Controls_DataUserControl)this.ViewUCControl).ViewUser(this.UserSelected);
    }

    protected void btnLogout_Click(object sender, EventArgs e)
    {
        QuestionnaireLib.UserControl.Logout();
        Response.Redirect("Default.aspx");
    }

    protected void btnSimpleDataUser_Click(object sender, EventArgs e)
    {
        this.LoadDefaultControl();
    }

    protected void btnPassChange_Click(object sender, EventArgs e)
    {
        this.LoadControlForPanel<ChangePasswordControl>("ChangePasswordControl.ascx");
    }

    protected void btnLoginChange_Click(object sender, EventArgs e)
    {
        this.LoadControlForPanel<ChangeLoginControl>("ChangeLoginControl.ascx");
    }
    protected void btnDeleteAccount_Click(object sender, EventArgs e)
    {
        this.LoadControlForPanel<QuestionYesNoControl>("QuestionYesNoControl.ascx");
        ((QuestionYesNoControl)this.ViewUCControl).SetQuestion("Czy chcesz usunąć konto?");
    }
}

Kontrolki te ładują się poprawnie, ale niestety za pierwszym razem kontrolka gdy się załaduje nie wykonuje żadnej akcji po kliknięciu na niej. No chcemy wyświetlić / mienić dane publiczne danego usera to wybieramy na panelu przycisk, który wywołuje metodę: LoadDefaultControl()
Metoda dodaje kontrolkę:

public partial class Controls_DataUserControl : System.Web.UI.UserControl
{
    private QuestionnaireLib.User userSelected = null;

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

    public void ViewUser(QuestionnaireLib.User userSelected)
    {
        this.userSelected = userSelected;
        this.tbName.Text = userSelected.Name;
        this.tbLastName.Text = userSelected.LastName;
        this.tbEmail.Text = userSelected.Email;
    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        this.lblEditStatus.Text = string.Empty;

        QuestionnaireLib.UserControl ctrl = new QuestionnaireLib.UserControl();
        this.userSelected.Name = this.tbName.Text;
        this.userSelected.LastName = this.tbLastName.Text;
        this.userSelected.Email = this.tbEmail.Text;

        if (ctrl.EditUser(this.userSelected) == false)
            this.lblEditStatus.Text = "Edycja nie powiodła się.";
    }

Niestety za pierwszym razem przycisk naciśnięty nawet nie wchodzi w tryb debugu. Następuje refresh strony i dopiero wtedy zaczyna działać przycisk. Dlaczego tak się dzieje i jak to naprawić?

Pozdrawiam,

0

Uprościłem przykład i zauważyłem, że nawet coś tak prostego nie działa:

public partial class Controls_DataUserControl : System.Web.UI.UserControl
{
    public event EventHandler ButtonClickDemo;

    protected void Page_Load(object sender, EventArgs e)
    {
        this.tbEmail.Text = "aa";
    }

    public void ViewUser(QuestionnaireLib.User userSelected)
    {
        this.tbName.Text = userSelected.Name;
        this.tbLastName.Text = userSelected.LastName;
        this.tbEmail.Text = userSelected.Email;
    }

    public string NameObj
    {
        get { return this.tbName.Text; }
    }

    public string LastName
    {
        get { return this.tbLastName.Text; }
    }

    public string Email
    {
        get { return this.tbEmail.Text; }
    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        ButtonClickDemo(sender, e);
    }
public partial class MenuUserLoggedForm : System.Web.UI.Page
{
    private QuestionnaireLib.UserControl ctrl = new QuestionnaireLib.UserControl();
    private QuestionnaireLib.User userSelected = null;

    protected void Page_Load(object sender, EventArgs e)
    {
        this.userSelected = ctrl.GetLoggedUser();
        this.DataUserControl1.ButtonClickDemo += new EventHandler(Demo1_ButtonClickDemo);
        //this.DataUserControl1.ViewUser(this.userSelected);
    }

    protected void Demo1_ButtonClickDemo(object sender, EventArgs e)
    {
        string name = this.DataUserControl1.NameObj;
        string last = this.DataUserControl1.LastName;
        string email = this.DataUserControl1.Email;
    }

Email zawsze wynosi wartość "aa", niezależnie co wpisze w TextBox. Jak to możliwe"?

0

Ja pierdziele fail roku -_-. Poniżej poprawna wersja. Bawiłem się z tym szajsem przez 3 godziny. LOL
Problem rozwiązany, a moja potrzeba porozmawiania z samym sobą zaspokojona :)

public partial class Controls_DataUserControl : System.Web.UI.UserControl
{
    public event EventHandler ButtonClickDemo;
 
    protected void Page_Load(object sender, EventArgs e)
    {
         if (!Page.IsPostBack)
            this.tbEmail.Text = "aa";
    }
0

Dzięki w imieniu forumowiczów, że chciało Ci się napisać post z rozwiązaniem :). Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1