2009-12-18 4 views
0

J'ai un UserControl appelé « Inspirations » avec la propriété publique suivantAsp.Net: valeur de la propriété problématisation dans UserControl

private int pagenumber; 
public int PageNumber 
{ 

    get { return pagenumber; } 
    set { pagenumber = value; } 

} 

Sur ma page aspx Je mets la valeur de la propriété comme ceci:

Inspirations.PageNumber = (int)Convert.ToInt32(this.txtNum.Text); 

sur ma page aspx Je vous écris de nouveau la valeur pour vérifier sa été définie:

Response.Write(Inspirations.PageNumber.ToString()); 

... et il a sur m y page aspx.

Cependant, j'ai un bouton sur mon UserControl pour tester la valeur de PageNumber et quand je clique, il revient toujours à zéro.

protected void btnAddCompany_Click(object sender, EventArgs e) 
{ 
    Response.Write(PageNumber.ToString()); 
} 

... la valeur de la propriété ne semble pas avoir été transmise à mon contrôle.

Quelqu'un peut-il me dire ce que je fais mal, s'il vous plaît.

Cordialement Faire fondre

+0

Où dans le cycle de vie de la page définissez-vous la valeur, et où dans le cycle de vie de la page lisez-vous? –

Répondre

2

Vous devez persister la valeur ViewState ou SessionState:

par exemple:

public int PageNumber 
     { 
      get 
      { 
       if (ViewState["PageNumber"] == null || ViewState["PageNumber"].ToString().Trim() == String.Empty) 
       { 
        ViewState["PageNumber"] = 0; 
       } 
       return Int32.Parse(ViewState["PageNumber"].ToString().Trim()); 
      } 
      set 
      { 
       ViewState["PageNumber"] = value; 
      } 
     } 
+0

Merci beaucoup pour cette solution de travail – Melt

+0

..et merci à tous pour toutes les réponses – Melt

0

Votre bouton clic via postback être exécuté ce qui signifie que d'autres méthodes (par exemple OnInit(), OnLoad()) dans le cycle de vie page ASP.NET reste appelée.

Si vous définissez PageNumber dans l'un d'entre eux, il effacera la valeur définie par le navigateur avant qu'il n'atteigne votre gestionnaire de clic.

Vérifiez la propriété IsPostBack avant de définir une valeur de propriété/champ pour empêcher cela.

0

La séquence des événements/phases dans une page ASPX comprend les éléments suivants (ce qui est une liste partielle):

  1. OnInit (contrôles, puis la page)
  2. OnLoad (page d'abord, puis les contrôles)
  3. événements de contrôle (par exemple un bouton presse)
  4. de prerender
  5. Render

Tout code du côté de balisage des choses est appelé au cours de la phase de rendu.

En général, l'appel Response.Write() n'est pas sûr sauf pendant le rendu. Si vous l'appelez avant, toute sortie apparaîtra avant l'ensemble de votre balisage. Donc, la réponse à votre question: tout d'abord, tout cela doit se produire pendant la même requête, car le simple fait de stocker une propriété publique ne va pas maintenir la valeur entre les requêtes. Ensuite, assurez-vous de définir la propriété au début du cycle de vie (généralement OnLoad). Ensuite, n'utilisez pas Response.Write() pour afficher les résultats. Définissez la valeur d'un contrôle <asp:Label> ou quelque chose comme ça.

Questions connexes