2009-10-28 6 views
0

Control Dans un livre, je l'ai vu qu'ils économisent propriétés personnalisées de contrôle utilisateur comme celui-ci:utilisateur Viewstate

private int id = 0; 
    public int ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     this.Page.RegisterRequiresControlState(this); 
    } 

    protected override void LoadControlState(object savedState) 
    { 
     object[] ctlState = (object[])savedState; 
     base.LoadControlState(ctlState[0]); 
     this.ID = (int)ctlState[1]; 
    } 

    protected override object SaveControlState() 
    { 
     object[] ctlState = new object[2]; 
     ctlState[0] = base.SaveControlState(); 
     ctlState[1] = this.ID; 
     return ctlState; 
    } 

Ma question est pourquoi puis-je stocker simplement (en setter) dans ViewState comme: Vistate [ "ID"] = id;
et ensuite récupérer le formulaire là?

Répondre

2

Il y a une différence entre ViewState (ce que vous parlez dans votre question) et ControlState (ce qui est montré dans l'exemple de code):

  • ViewState peut être désactivé par l'utilisateur de votre UserControl, en définissant EnableViewState="false". Dans ce cas, vous ne pourrez pas restaurer la valeur de votre propriété lors de la prochaine demande/publication (car il n'y a pas ViewState).
  • L'état ControlState ne peut pas être désactivé. Cela signifie que tout ce que vous stockez dans ControlState sera disponible lors de la prochaine publication et que vous devriez donc utiliser ControlState pour les données dont vous avez absolument besoin pour récupérer lors de la prochaine demande/publication.

Voir aussi dans ces pages MSDN: ASP.NET ViewState Overview et ControlState vs. ViewState

Extrait de la première page:

En plus de l'état d'affichage, ASP.NET prend en charge le contrôle de l'état. La page utilise l'état de contrôle pour conserver le contrôle informations qui doivent être conservées entre les publications, même si l'état d'affichage est désactivé pour la page ou pour un contrôle . Comme l'état d'affichage, l'état de contrôle est stocké dans un ou plusieurs champs masqués. Que voulez-vous dire "peut être désactivé par l'utilisateur de votre UserControl"?

+0

Vous voulez dire par le devloper qui utilise ce contrôle sur sa page Web? Si oui, il peut également supprimer le ControlState du contrôle utilisateur ... – samuel

+0

Celui qui écrit la page qui utilise le contrôle peut définir la propriété "EnableViewState" qui peut être désactivée, ce qui n'est pas le cas pour le ControlState car il n'y en a pas. t la propriété pour l'éteindre. –

+0

Je ne comprends toujours pas, l'utilisateur n'est pas l '"utilisateur final" qui visite mon site, l'utilisation est le développeur qui utilise ce contrôle sur sa page. Pourquoi devrait-il éteindre le viewstate s'il prévoit de l'utiliser pour la propriété? – samuel