[.NET/C#] Geen ViewState in UserControl

Pagina: 1
Acties:
  • 325 views sinds 30-01-2008
  • Reageer

  • Elect
  • Registratie: Mei 2000
  • Niet online
[Situatieschets]

/Default.aspx
Plaats voor de standaard layout (header) en een Menu. Menuopties wijzigen aan de hand van de menukeus die je maakt. Dit gebeurd via een Switch (). In die switch worden de UserControls aangeroepen. Dit gaat prima en de controls worden netjes aangroepen en getoont zoals het hoort.
code:
1
2
3
case 0:
UserControl = Page.LoadControl("~/FrontEnd/Projects.ascx");
break;

/FrontEnd/Projects.ascx
De Projects.ascx is een UserControl waar een overzicht staat. Dit overzicht veranderd zodra er een keus gemaakt wordt in een DropDown menu.
De DropDown veroorzaakt een PostBack, nu werkt dit prima als stand-alone pagina en komen de juiste values uit het DropDown menu (via DropDown.SelectedValue).

Probleem is nu dat als ik de Projects.ascx daadwerkelijk als Usercontrol aanroep (in Default.aspx), hij bij een PostBack de DropDown menu waarden niet meer ziet. Het is alsof de ViewState niet doorkomt.
code:
1
2
3
4
5
6
7
8
if (Page.IsPostBack)
{
Parameter = DropDown.SelectedValue;
}
else
{
Parameter = 1;
}

Dit is maar een voorbeeld, maar het werkt praktisch hetzelfde.
Nu zie ik dat een usercontrol normaal gezien iets anders wordt aangeroepen. In de HTML zetten ze bijvoorbeeld;
code:
1
<%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>

En dan ergens midden in de pagina
code:
1
<uc1:header id="Header1" runat="server"></uc1:header>


Ik heb dit getest en werkt inderdaad. Enige nadeel is dat dit niet variabel genoeg is voor wat ik wil. Is het mogelijk in de Code behind ook zoiets te zetten zodat de pagina weet waar de ViewState naartoe moet?

HelmChat.eu - Free Motorcycle Group Chats


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:35

gorgi_19

Kruimeltjes zijn weer op :9

Waar staat die case?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • tijn
  • Registratie: Februari 2000
  • Laatst online: 19-02 13:45
Wanneer laadt je de UserControls in? Als dit in het Init event gebeurt hou je de ViewState. Alles daarna is over en sluiten (bijvoorbeeld het Load event of in andere event handlers).

Cuyahoga .NET website framework


  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Als je custom controls gebruikt, moet je die altijd weer op de pagina zetten, dus ook bij een PostBack actie.
Als je dat niet doet, is ie bij de volgende pageload weg..
Of is dit niet echt wat je bedoeld?
Misschien is het handig om het met ECHTE code te testen en ook met de echte waardes.
Mijn ervaring is, wanneer je het met een testcase doet het nog wel eens anders uitpakt, omdat je daar niet met alles rekening houdt (onbewust that is)

  • Elect
  • Registratie: Mei 2000
  • Niet online
De pagina wordt elke keer netjes wel herladen, maar hij mist alleen z'n viewstate. Ik heb op de Projects.ascx pagina gecontroleerd of z'n IsPostBack werkt, en dat is allemaal goed. Krijg ook netjes het overzicht te zien, alleen staan alle waarden op 0 (wat klopt (is standaard), maar niet als hij een PostBack heeft).

Ik heb de 'private Void Page_Load' vervangen door private 'private void _default_Init', maar het maakt geen verschil..

Default.aspx
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private void _default_Init(object sender, System.EventArgs e)
{

int SelectedPage;
int SelectedMenu;
Control MainTable;
Control UserControl = null;

// Find out where we have to put our user control
MainTable = Page.FindControl("mainpage");

// Get the index of the use control we must load
SelectedPage = Convert.ToInt32(Request.QueryString.Get("page"));
SelectedMenu = Convert.ToInt32(Request.QueryString.Get("menu"));

switch (SelectedPage)

case 0: // Projects Summary
{   
    MainMenu.Topics.Add("Reports");

    switch (SelectedMenu)
    {
        case 0: //Reports
        UserControl = Page.LoadControl("~/FrontEnd/Reports.ascx");
        break;

        case 100: //Summary
        UserControl = Page.LoadControl("~/FrontEnd/Projects.ascx");
        break;          
        }
    break;
    }
}

//Add the selected UserControl to the MainTable
if (UserControl != null)
{
    MainTable.Controls.Add(UserControl);
}
}

HelmChat.eu - Free Motorcycle Group Chats


  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
En hoe ziet de Page_Load vna de usercontrol eruit?
Reset je daar geen waardes?

  • Elect
  • Registratie: Mei 2000
  • Niet online
Ik neem aan van niet. Heb ook de usercontrol net geprobeerd met _default_Init, maar geen knik.
code:
1
2
3
4
5
6
public class Projects : System.Web.UI.UserControl
{
    protected System.Web.UI.WebControls.DropDownList DropDown;

    private void Page_Load(object sender, System.EventArgs e)
    {

En die vraagt op den duur om de waarde van de dropdown
code:
1
lbBusinessNameID = Convert.ToInt32(DropDown.SelectedValue);


Is het niets met die InitializeComponant?
code:
1
2
3
4
private void InitializeComponent()
{
    this.Load += new System.EventHandler(this.Page_Load);
}

HelmChat.eu - Free Motorcycle Group Chats


  • Elect
  • Registratie: Mei 2000
  • Niet online
Hmm, niemand nog een idee?

HelmChat.eu - Free Motorcycle Group Chats


  • Shir
  • Registratie: November 2000
  • Laatst online: 25-11-2025
Misschien helpt het om een ID mee te geven:

C#:
1
2
3
4
5
6
7
8
case 0:
UserControl = Page.LoadControl("~/FrontEnd/Projects.ascx");
UserControl.ID = "ProjectView1";
break;

...

MainTable.Controls.Add(UserControl);
Pagina: 1