2017-07-13 4 views
0

Ceci est probablement simple.Code de variables derrière Cant Access

J'ai un DropDownList et une fois qu'un utilisateur clique sur un élément, je dois me souvenir de ce qu'il a cliqué avant que le DropdownList ne rebondisse donc j'ai fait une variable à l'extérieur.

Mais le problème est que cette variable ne peut pas être vu. La seule fois où j'ai réussi à le faire fonctionner est en utilisant Public Shared variableoutside comme Integer. Mais ceci le rend accessible à chaque page dont je n'ai besoin que sur cette page que je cours.

Dim variableoutside as Integer 

Protected Sub lstTest_DataBound(sender As Object, e As EventArgs) Handles lstTest.DataBound 
    if variableoutside > 0 Then lstTest.SelectedIndex = variableoutside 
End Sub 

Protected Sub lstTest_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstTest.SelectedIndexChanged 
    variableoutside = lstTest.SelectedIndex 
    lstTest.DataValueField = "ID" 
    lstTest.DataTextField = "testvalue" 
    lstTest.DataSource = List_TestA.List_Test() 
    lstTest.DataBind() 
End Sub 

Répondre

0

Les champs ne durent que la durée de la demande. Lors de la publication, vous obtenez une nouvelle instance de la classe Page, donc de nouveaux champs d'instance. Un champ partagé (statique en C#) est plus long (durée de vie totale de l'application), mais sa valeur est partagée par tous les utilisateurs de votre site, ce qui n'est probablement pas ce que vous recherchez. Une solution est de stocker cette valeur dans Session. Cela est conçu pour le stockage de demandes de valeurs spécifiques à l'utilisateur. Notez que les valeurs sont masquées en tant qu'objet, vous devrez donc renvoyer vers Int.

EDIT
par exemple, votre code

Protected Sub lstTest_DataBound(sender As Object, e As EventArgs) Handles lstTest.DataBound 
    if variableoutside > 0 Then lstTest.SelectedIndex = variableoutside 
End Sub 

pourrait être

Protected Sub lstTest_DataBound(sender As Object, e As EventArgs) Handles lstTest.DataBound 
    Dim variableoutside as Integer 
    variableoutside = Session("ListIndex") ' probably cast this to Integer 
    if variableoutside > 0 Then lstTest.SelectedIndex = variableoutside 
End Sub 

(note que je devine à la syntaxe VB correcte, vous devrez peut-être modifier ce)

Et bien sûr dans l'autre méthode, au lieu de:

variableoutside = lstTest.SelectedIndex 

Utilisez cette option pour définie cette valeur de session:

Session("ListIndex") = lstTest.SelectedIndex 

Vous pouvez supprimer ce champ de classe, comme ce n'est plus utilisé.

+0

Merci pour la réponse, pourriez-vous élaborer sur la façon dont je le ferais dans les sessions, version propre. – Kiel

+0

J'ai ajouté un exemple de code –

0

Wow, c'est vraiment cool. Je l'aime, je vous remercie ...

Je l'ai changé un peu et j'ai abandonné la variable Dimide en dehors de et j'ai utilisé la Session ("lstTest") comme variable principale. Il se souvient à chaque fois.

Vous avez ouvert beaucoup de portes pour moi, et maintenant je peux les utiliser pour se souvenir des lots des paramètres de DropDownList, CheckBoxes, Textboxes. La seule chose que je voulais savoir, c'est combien de ces variables de session êtes-vous autorisé, car je suppose que les sessions utilisent des cookies et que les cookies ont un maximum autorisé par client et navigateur avant de commencer à se remplacer. Au moins, c'était vrai quand j'utilisais PHP dans la journée.