J'ai obtenu un exemple de code d'un site. une chose que je ne comprends tout simplement pas comment la valeur est ajoutée automatiquement dans ViewState
.Confusion concernant la propriété C#
le code comme suit
private Dictionary<Guid, string> Names
{
get { return (Dictionary<Guid, string>)ViewState["Names"]; }
set { ViewState["Names"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// to keep this sample really simple, we will populate some
// sample data in a Dictionary and store in the viewstate
var names = new Dictionary<Guid, string>
{
{ Guid.NewGuid(), "John" },
{ Guid.NewGuid(), "Smith" },
{ Guid.NewGuid(), "Arther" },
{ Guid.NewGuid(), "Hari" }
};
//store the list in the viewstate.
ViewState.Add("Names", names);
//init grid
}
}
protected void btnAddSave_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Names.Add(Guid.NewGuid(), txtNewName.Text);
}
}
en cas de chargement de la page Je comprends que quelques valeurs ont été ajoutées dans la collection Dictionnaire et après que toute la collection est ajouté dans ViewState nommé « noms ».
dans btnAddSave_Click
événement le code Names.Add(Guid.NewGuid(), txtNewName.Text);
ajoute à nouveau le nom dans la collection.
mais une chose que je ne comprends tout simplement pas comment la nouvelle valeur est ajoutée dans viewstate.
Si quelqu'un regarde private Dictionary<Guid, string> Names
propriété il n'y a aucun setter donc comment automatiquement la nouvelle valeur est ajoutée dans ViewState. J'espère que ma question est claire. en un mot simple, je veux juste savoir qu'il n'y a pas de setter mais ensuite comment de nouvelles valeurs ont été ajoutées dans ViewState lorsque le code va comme Names.Add(Guid.NewGuid(), txtNewName.Text);
.
automatiquement comment de nouvelles valeurs ont été ajoutées dans ViewState. car de nouvelles valeurs sont ajoutées dans la collection de dictionnaires mais aucun code n'est disponible où toutes les valeurs de dictionnaire sont ajoutées dans ViewState après avoir ajouté une valeur à la collection de dictionnaires.j'exécute le code et cela fonctionne bien. Ce code devient donc très ambigu pour moi. alors aidez-moi à comprendre comment de nouvelles valeurs sont ajoutées dans ViewState lorsque de nouvelles valeurs sont ajoutées dans la collection de dictionnaires. Merci!
comment cela fonctionne. pouvez-vous s'il vous plaît expirer plus avec l'exemple de code. merci – Thomas
j'ai fait une erreur pour donner le code. code est privé Dictionary Noms {get {return (Dictionary ) ViewState ["Noms"]; }} en fait il n'y avait pas setter donc quand Names.Add (Guid.NewGuid(), txtNewName.Text); ce code exécuté alors comment nouvelle valeur est ajoutée dans viewstate parce qu'ici j'ajoute une nouvelle valeur à dictionary.so comment le dictionnaire est ajouté viewstate parce qu'aucun setter n'est là dans property.plzz expain –
Thomas
oublier le setter, son seul getter, maintenant quand vous déréférenciez la propriété readonly Names, le type réel derrière dereferencing est ViewState qui est inturn un statebag et statebag implémente IDictionary, c'est pourquoi vous pouvez cast ViewState au dictionnaire, maintenant Quand vous appelez la méthode Add de Dictionary, elle sera stockée dans le StateBag qui est connu de ViewState de Control. – TalentTuner