16 messaggi dal 30 maggio 2002
Buongiorno a tutti,
come dal titolo volevo chiedervi come posso (e se posso) usare il viewstate in un modulo .vb

nel codice aspx.vb non ho problemi:
Me.ViewState("NomeViewState") = Variabile

non riesco però a capire come usarlo in un .vb nell'appcode

potete darmi una mano?

Grazie in anticipo
Ric.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
ViewState è una proprietà Protected, a cui perciò non puoi accedere da un modulo esterno alla classe Page.

Comunque non è un problema, perché puoi fare in modo che il metodo che hai nel modulo accetti un parametro di tipo System.Web.UI.StateBag.
Module Module1
    Public Sub Metodo(viewState As System.Web.UI.StateBag)
      'qui logica
    End Sub
End Module

Quando devi invocare quel metodo, gli passi un riferimento al ViewState.
Module1.Metodo(Me.ViewState)

Questa è anche una soluzione migliore perché il tuo metodo espone chiaramente una dipendenza da un oggetto StateBag (cioè non puoi invocare il metodo senza fornire anche un'istanza di quell'oggetto).

Ancora meglio sarebbe se il tuo metodo, al posto di StateBag, accettasse un IDictioary (interfaccia implementata da StateBag), così potrai mockarla più facilmente nei tuoi unit tests.
Module Module1
    Public Sub Metodo(viewState As System.Collections.IDictionary)
      'qui logica
    End Sub
End Module


ciao,
Moreno
Modificato da BrightSoul il 16 novembre 2014 15.33 -

Enjoy learning and just keep making
16 messaggi dal 30 maggio 2002
Grazie Moreno.. prezioso come al solito
...quindi ne approfitto :)

la stessa logica dovrebbe valere anche per recuperare dati da una querystring?

Module Module1
    Public Sub Metodo(queryString As System.Collections.Specialized.NameValueCollection)

      Dim Variabile As String = Request.QueryString("stringa")

    End Sub
End Module


..ma non va!!

Perdonate se sono domande banali ma ho iniziato da poco a studiare il .net e cerco di capirne qualcosa (per ora con tanta fatica!!)
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

guest99 ha scritto:

la stessa logica dovrebbe valere anche per recuperare dati da una querystring?

Certamente, ma devi usare il parametro di tipo NameValueCollection che hai appositamente predisposto.

Dim Variabile As String = Request.QueryString("stringa")
Dim Variabile As String = queryString("stringa")


Dalla pagina, dovrai invocare il metodo in questo modo:
Module1.Metodo(Request.QueryString)


ciao,
Moreno
Modificato da BrightSoul il 17 novembre 2014 20.18 -

Enjoy learning and just keep making
16 messaggi dal 30 maggio 2002
Ok.. ci sono
non ho ancora fatto prove con il codice e devo approfondire ma penso di aver capito. Grazie mille

domanda..
Hai detto:
..così potrai mockarla più facilmente nei tuoi unit tests.

Mockare?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
sì, nella pratica dello unit testing ogni componente della tua applicazione può (e deve) essere testato singolarmente, per provarne la robustezza e che non vi siano bug grossolani.
Immaginati di essere un meccanico che debba testare una candela. La posiziona sul suo banco di lavoro e le dà corrente. E' tutto ciò che serve per verificarne il funzionamento. Non serve che sia collegata al resto del motore.

Allo stesso modo, anche il tuo modulo può essere testato al di fuori di una richiesta web. Il mock è un oggetto "finto", che implementa IDictionary (in questo caso) ma che non è il ViewState vero e proprio. Puoi manipolare il mock a piacimento e poi darlo in pasto al tuo modulo per vedere come si comporta. Spesso gli si passano oggetti mock volutamente "sbagliati" per verificare che il modulo non produca errori e che comunque si comporti in maniera prevedibile anche in situazioni anomale.

Se vuoi saperne di più sullo unit testing, inizia da qui.
http://msdn.microsoft.com/it-it/library/hh694602.aspx

ciao,
Moreno
Modificato da BrightSoul il 18 novembre 2014 13.41 -

Enjoy learning and just keep making
16 messaggi dal 30 maggio 2002
Wow...
Mi hai trovato da fare per stasera!! ( ..e chissà per quante sere)
Grazie ancora
11.886 messaggi dal 09 febbraio 2002
Contributi

Prego! Lo unit testing è una pratica di grande valore, sia per il tuo codice che per te.
Già soltanto chiederti "Come potrei testare questo componente?", ti aiuta a seguire alcune delle best practices.
Inoltre, se riesci a "coprire" bene il tuo codice con i test, potrai apportare modifiche con molta più serenità: se qualcosa si spacca, lo scoprirai subito perché uno o più test inizieranno a fallire.
E' un ottimo ausilio per produrre codice di qualità (e per vivere più tranquilli, un po' come quando guidi con la cintura allacciata).

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.