2010-04-16 6 views
1

Quelqu'un peut-il expliquer ViewState (dans ASP.NET) aussi court que possible.ViewState dans ASP.net

+0

Autre que, " viewstate met une mauvaise chaîne cachée sur toutes vos pages web "? – Fenton

Répondre

3

ViewState est le mécanisme qui permet de conserver les valeurs d'état entre les publications de page.

La bande est sans état. Mais dans ASP.NET, l'état d'une page est automatiquement conservé dans la page elle-même. Ceci est fait en utilisant ViewState.In ViewState les valeurs sont cryptées et sauvegardées dans des contrôles cachés.

Lorsque vous affichez la source de la page (dans votre navigateur) d'une page des utilisations ViewState, vous pouvez voir ce viewstate caché

entrée

qui ressemble à quelque chose comme ceci:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM1ODM3Nj......." /> 

Ce single caché Le champ contient toutes les valeurs viewstate pour tous les contrôles de page. Parce que viewstate est (par défaut) envoyé au navigateur client, puis renvoyé au serveur sous la forme d'un contrôle d'entrée masqué sur votre page, le stockage d'une quantité importante de données dans viewstate peut augmenter la taille de votre page et affecter la performance de votre page.

Pour désactiver ViewState pour un contrôle, vous pouvez définir la propriété EnableViewState sur false.

+1

Ce n'est pas très court! De plus, les valeurs de contrôle viewstate ne sont pas cryptées par défaut - elles sont codées en base 64. – Bermo

+0

@Bermo j'essaie de couvrir le maximum d'informations en mots minimum avec exemple. – MAS1

0

De here:

ViewState permet à l'état d'objets (sérialisables) à stocker dans un champ caché sur la page. ViewState est transporté vers le client et de nouveau vers le serveur, et n'est pas stocké sur le serveur ou toute autre source externe. ViewState est utilisé pour conserver l'état des objets côté serveur entre les post-paquets.

0

En bref,

  1. état de session pour la page
  2. Permet repopulation de contrôle sur postback
  3. Certificats de cryptage
  4. Placée dans le champ caché
  5. peut être désactivé par enableViewState étiquette
0

PREMIER NOUS CREER UNE FONCTION POUR VIEWSTATTE CRÉER
dgpayment est gridview

private void BindGrid(int rowcount) 
    { 
     DataTable dt = new DataTable(); 
     DataRow dr; 
     dt.Columns.Add(new System.Data.DataColumn("AccName", typeof(String))); 
     dt.Columns.Add(new System.Data.DataColumn("Remarks", typeof(String))); 
     if (ViewState["CurrentData"] != null) 
     { 
     for (int i = 0; i < rowcount + 1; i++) 
     { 
     dt = (DataTable)ViewState["CurrentData"]; 
     if (dt.Rows.Count > 0) 
     { 
     dr = dt.NewRow(); 
     dr[0] = dt.Rows[0][0].ToString(); 
     } 
     } 
     dr = dt.NewRow(); 
     dr[0] = txtAccntName.Text; 
     dr[1] = txtRemark.Text; 
     dt.Rows.Add(dr); 
     } 
     else 
     { 
     dr = dt.NewRow(); 
     dr[0] = txtAccntName.Text; 
     dr[1] = txtRemark.Text; 
     dt.Rows.Add(dr); 
     } 
     if (ViewState["CurrentData"] != null) 
     { 
     dgPayment.DataSource = (DataTable)ViewState["CurrentData"]; 
      dgPayment.DataBind(); 
     } 
     else 
     { 
     dgPayment.DataSource = dt; 
     dgPayment.DataBind(); 
     } 
ViewState["CurrentData"] = dt; 

} 

APRÈS QUE AJOUTER CODE DE BOUTON AJOUTER

protected void btnADD_Click(object sender, EventArgs e) 
    { 
    if (ViewState["CurrentData"] != null) 
    { 
    DataTable dt = (DataTable)ViewState["CurrentData"]; 
    int count = dt.Rows.Count; 
    BindGrid(count); 
    } 
    else 
    { 
    BindGrid(1); 
    } 
    }