Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Gestione dello stato in asp.net
mercoledì 28 luglio 2010 - 15.28
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 3.5
|
Visual Studio Express
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 15:28
Salve sto leggendo un libro e mi sono un po confuso in un capitolo relativo alla gestione dello stato.
So che è una cosa semplicissima tuttavia non riesco a comprendere bene.
Ho due pagine aspx:
Nella prima inserisco una serie di valori che vado a memorizzare in dei campi Hidden.
Nella seconda come faccio a richiamarmi il valore di un campo inserito nel campo Hidden????
In più sapreste spiegarmi nello specifico a cosa possono servire questi campi HideenField?
Spero di ricevere una vs risposta al piu presto.
Tks!!
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 16:01
HiddenField praticamente è un controllo che viene renderizzato in HTML come il tag seguente, per farti un esmpio:
<input name="HiddenField1" id="HiddenField1" type="hidden" value="QualsiasiCosa"/>
praticamente è un elemento esistente ma non visibile graficamente quindi puoi tranquillamente utilizzarlo per qualsiasi scopo e anche per trasportare valori da una pagina ad un altra.
quindi se per esempio nella prima pagina hai inserito un tag:
<asp:HiddenField ID="HiddenField1" runat="server" Value="QualsiasiCosa" />
puoi recuperare il suo valore nella pagina seguente inserendo questo codice nell'evento load della seconda pagina:
HiddenField HF = (HiddenField)Page.PreviousPage.FindControl("HiddenField1");
string valoreHFpagPrec = HF.Value;
praticamente il metodo FindControl dell'oggetto PreviousPage restituisce un oggetto Control che poi con l'opportuno cast lo assegno ad un HiddenField, visto che il controllo che sono andato a cercare è un HiddenField
Considera che se per esempio devi recuperare il valore di una textbox che è nella prima pagina non ha senso usare un hiddenfield, ti conviene andare a ricercarti direttamente la textbox
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 18:12
Ok. quindi non si "ripesca" nella seconda pagina da Request.Form?
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 18:42
no lo recuperi anche così ma ormai mi sono abituato a cercarlo dall'oggetto PreviousPage che uso sempre questo metodo anche se in un contesto di masterpage forse diventa più complicato perchè devi fare una ricerca nei vari contenitori, invece con request vai diretto al punto.
Quali possano essere le differenze d'implementazione non te lo so dire, ecco forse (ma dico forse) è un pò meno sicuro usare direttamente request perchè ti potrebbero iniettare codice, però è una cosa che sto sparando così al volo e non prenderla per buona...
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 18:48
Pero intanto se faccio nella pagina successiva:
Textbox1.Text=Request.Form("HiddenField1")
Non mi fa un bel niente!! come mai??!!
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 18:48
ecco per esempio se vuoi cercare un controllo della pagina precedente di cui ha una proprietà che non viene inviata avanti e indietro tramite form allora in questo caso devi accedere direttamente alla pagina precedente...
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 18:48
io ho provato e funziona, aspe che ricontrollo
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 18:51
scusa ma come passi da una pagina all'altra?
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 18:53
Attraverso il clic di un pulsante Button-> Response.Redirect("./Default2.aspx")
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 18:57
a ecco allora dovè il problema, ma perchè usi questo sistema??? così facendo probabilmente fai un redirezzionamento secco cancellando l'oggetto page e tutto il suo contenuto compreso il form.
usa la proprietà PostBackUrl="~/Default2.aspx" del controllo button, oppure se proprio devi accedere all'evento allora prova a usare Server.Transfer("~/Default2.aspx") così dovrebbe mantenere il tutto anzi se non ricordo male puoi proprio sceglierlo nel metodo con true o false se mantenere il form dopo il trasferimento...
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 18:58
ahhh ecco. Provo e ti faccio sapere!!
Grazie
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 19:04
Ehmmm non mi funziona lo stesso :)
Allora questo è il codice delle Pagina che deve visualizzare il controllo precedente.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TextBox1.Text = Request.Form("hf1")
End Sub
Questo invece è il controllo HTML del hiddenfield:
<asp:HiddenField ID="hf1" Value="valoreprova" runat="server" />
Tecnicamente la textbox1 della seconda pagina dovrebbe essere "valoreprova"
Non mi funziona ne impostando la proprietà del pulsante PostBackUrl he con server.Transfer :(
Dove sta il problema!! Grazie e scusami !!
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 28 lug 2010 - 19:28
mmm io uso c# e non so bene decifrarlo VB comunque a occhio dovrebbe essere corretto.
controlla che non hai dimenticato levento click di prima sul pulsante
guarda io ho provato così, prima pagina:
<asp:HiddenField ID="HiddenField1" runat="server" Value="testo" />
<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/Default2.aspx" />
seconda pagina:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = Request.Form["HiddenField1"];
}
e così mi funziona non so che dire
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
mer 28 lug 2010 - 19:48
Ei ho aperto un altro progetto creandone un altro di prova e tutto funziona alla perfezione. Grazie!!
Un ultima domanda.
Io ho un hiddenfield cosi strutturato:
<asp:HiddenField ID="hf" Value="Prova" runat="server" />
Il value lo inserisco direttamente da HTML come posso fare per cambiare il valore tramite codice?
Mille grazie
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
gio 29 lug 2010 - 08:46
immagino che tu intenda che lo vuoi inserire da client, ti faccio un esmpio:
<script type="text/javascript">
function changeVal() {
document.getElementById("<%= TextBox1.ClientID %>").value = "testo";
}
</script>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<input id="Button1" type="button" value="cambia testo" onclick="changeVal()" />
praticametne in questo caso viene usato del codice javascript per modificare il valore, nota l'espressione "<%= TextBox1.ClientID %>" serve ad inserire l'id giusto del controllo renderizzato, in teoria avresti potuto metterci anche direttamente "TextBox1" ma in alcuni contesti Aspnet genera dei Client ID dinamicamente e quindi potrebbero essere diversi, tramite l'espressione aspnet associa automaticamente l'ID giusto generato (diciamo che in .Net 4 hai la possibilita di decidere come vengono generati gli ID, ma non ci divulghiamo troppo).
io ti ho fatto l'esempio con un pulsante HTMl ma puoi fare la stessa cosa con un pulsante Aspnet solo che invece di usare onclick devi usare OnClientClick, in questo modo la funzione Javascript verrà eseguita prima di effettuare il postback...
86Marco
Profilo
| Expert
889
messaggi | Data Invio:
gio 29 lug 2010 - 13:11
Ottimo sei stato chiarissimo.
Questo codice invece non funziona secondo te messo magari al clic di un pulsante o ad un evento page_Load?
HiddenField1.Value="prova"
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
ven 30 lug 2010 - 18:33
si certo senza problemi...
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !