Avatar billede heloo Nybegynder
09. november 2004 - 10:25 Der er 10 kommentarer og
1 løsning

usercontrol og viewstate

jeg tilføjer usercontrols fra codebehind ala:

protected UserControls.MyControl MyControl;

MyControl = (UserControls.MyControl)LoadControl("UserControls/MyControl.ascx");

MyPanel.Controls.Add(MyControl);
MyPanel.Visible=true;

bliver det ikke gemt i viewstate, eller hvad ??

hvad kan jeg gøre ved det ??
Avatar billede powernodes Nybegynder
09. november 2004 - 10:30 #1
MyControl.EnableViewState = true;
Avatar billede heloo Nybegynder
09. november 2004 - 10:39 #2
jeg fatter det ikke helt, fordi hvis jeg på den usercontrol jeg loader har:

private void LinkButton1_Click(object sender, System.EventArgs e)

Page.FindControl("Panel_1").Visible=true;
Page.FindControl("Panel_2").Visible=false;
}

virker det ikke..

men hvis jeg ikke loader usercontrollen fra codebehind og derimod trækker den ind i designeren i vs, så virker det ???
Avatar billede snepnet Nybegynder
09. november 2004 - 10:46 #3
hej heloo :o)

mener du om du kan nøjes med at indsætte kontrollen en gang, og at den således bliver hængende ved efterfølgende postbacks ?
(det er ikke tilfældet.... indsætter du dine kontroller dynamisk, skal du gøre det hver gang.... ellers skal du lave nogle ret specielle fiksfakserier.... der er en der har lavet en kontrol der kan gøre det her :http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx)

mvh
Avatar billede snepnet Nybegynder
09. november 2004 - 10:47 #4
når du trækker den ind i designeren står den i aspx-koden, og bliver loaded på den måde.
hvis du i din code-behind ikke indsætter den hver gang, svarer det lidt til at du efter første postbach fjerner den aspx-kode der indsætter den.
æhh... det blev lidt tåget... gav det mening ?
mvh
Avatar billede heloo Nybegynder
09. november 2004 - 10:49 #5
det problem har jeg vist haft før....øv *g*, nå men jeg må lege lidt med det...vender tilbage...
Avatar billede mccannon Nybegynder
09. november 2004 - 12:26 #6
For at bevare viewstate når laver det hele code behnd, skal man sige new eller loade since controller på init tidspunktet, da init køre før viewstate.
altså noget ligende det het:

public class X : y
{
  protected Usercontrol uc;
  protected ListBox lb;
 
    private void Page_Load(object sender, System.EventArgs e)
    {

    }

    #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);
                        //Vi kobler Init metoden på
            this.Init += new System.EventHandler(this.CvEdit_Init);
           
        }
        #endregion

        private void X_Init(object sender, EventArgs e)
        {
            Uc = (TopMenuEdit)Page.LoadControl("Usercontrol.ascx");
        this.Controls.Add(Uc);
           
            lb = new ListBox();
            this.Controls.Add(lb);
        }
}

Du kan så vælge at sætte datasource og almuligt andet i init eller på andre tidspunkter.
Avatar billede mccannon Nybegynder
09. november 2004 - 12:32 #7
hov der er vist nogle copy paste fejl
public class X : y
{
  protected Usercontrol uc;
  protected ListBox lb;
 
    private void Page_Load(object sender, System.EventArgs e)
    {

    }

    #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);
                        //Vi kobler Init metoden på
            this.Init += new System.EventHandler(this.X_Init);
           
        }
        #endregion

        private void X_Init(object sender, EventArgs e)
        {
            Uc = (Usercontrol)Page.LoadControl("Usercontrol.ascx");
        this.Controls.Add(Uc);
           
            lb = new ListBox();
            this.Controls.Add(lb);
        }
}
Avatar billede heloo Nybegynder
09. november 2004 - 13:57 #8
kanon mccannon....

jeg har gjort som du foreslår OG NU VIRKER DET !!!

send et svar ;-)
Avatar billede mccannon Nybegynder
09. november 2004 - 14:31 #9
et såkaldt svar :-)
Avatar billede heloo Nybegynder
09. november 2004 - 14:37 #10
overgodt !! tak ;)

Håber at i andre synes det er ok at mccannon får points'ne
Men det var det der løste mit aktuelle problem.

Go' dag til alle

ses
Avatar billede snepnet Nybegynder
09. november 2004 - 18:48 #11
det er naturligvis helt ok... jeg troede bare dit problem var at du mente det var forkert at tilføje kontrollen til sidens kontroltræ hver gang, og at den burde blive i kontroltræet når du indsatte den én gang :o)
mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester