Entra nell'evento, ma non esegue le modifiche

martedì 05 maggio 2009 - 12.45

Icechry Profilo | Junior Member

Ciao a tutti!
Sono nuovo del forum, vi scrivo perchè ho un problema che sembra semplicissimo, ma non riesco a risolvere. Il mio codice è questo:

System.Timers.Timer timer = new System.Timers.Timer();
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
timer.Interval = 5000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
}

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Button1.Text = "ciao";
timer.Stop();
}

Il problema è che entra nell'evento elapsed, ma non cambia il testo del bottone, sapete darmi qualche dritta?
Grazie
Christian

rossimarko Profilo | Guru

Ciao,

occhio che una pagina asp.net non funziona come se fosse una windows application... una volta renderizzata non è aggiornabile se non con una chiamata dal client al server.

Mi spiego meglio, se vuoi gestire un timer, non lo devi fare lato server, ma lato client, ovvero via javascript inserire nella pagina un "timer" che ogni xx secondi fa una chiamata al server.

Per semplificare queste gestioni all'interno di ajax trovi un controllo timer da usare in combinazione con un updatepanel. Sul sito http://www.asp.net/ajax/ trovi documentazione a riguardo e un esempio di utilizzo: http://www.asp.net/AJAX/Documentation/Live/overview/UsingTimerControlTutorial.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Quindi per fare una cosa del genere dovrei creare l'oggetto e l'evento lato server, ma poi far si che venga chiamato dal client? Ho provato anche ad usare l'oggetto timer che dici tu, però non mi entra mai nel tick e non so per quale motivo.

rossimarko Profilo | Guru

>Quindi per fare una cosa del genere dovrei creare l'oggetto e
>l'evento lato server, ma poi far si che venga chiamato dal client?


No no, devi fare tutto lato client. Se usi i controlli ajax di asp.net è abbastanza semplice.

Inserisci il timer, inserisci l'update panel che dovrà contentere il controllo che vuoi modificare. Poi nei trigger dell'updatepanel agganci l'evento tick del controllo timer (così il contenuto del controllo viene aggiornato ad ogni tick).

Lato server intercetti l'evento tick del timer e modifichi la proprietà del controllo che hai messo dentro l'update panel (il button)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

protected void Page_Load(object sender, EventArgs e)
{
OriginalTime.Text = DateTime.Now.ToLongTimeString();
}

protected void Timer1_Tick(object sender, EventArgs e)
{
StockPrice.Text = GetStockPrice();
TimeOfPrice.Text = DateTime.Now.ToLongTimeString();
}

private string GetStockPrice()
{
double randomStockPrice = 50 + new Random().NextDouble();
return randomStockPrice.ToString("C");
}

Ho eseguito questo codice trovato nella pagina che mi avevi detto, ma anche in questo caso non mi entra mai nel tick. Ho settato l'intervallo a 5000 e l'oggetto è enable. Devo aggiungere l'updatePanel comunque quindi?

rossimarko Profilo | Guru

Che visual studio stai usando? Ajax è registrato correttamente? Lo script manager?

Se guardi il codice aspx :

<asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="10000" /> <asp:UpdatePanel ID="StockPricePanel" runat="server" UpdateMode="Conditional"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" /> </Triggers> <ContentTemplate> Stock price is <asp:Label id="StockPrice" runat="server"></asp:Label><BR /> as of <asp:Label id="TimeOfPrice" runat="server"></asp:Label> <br /> </ContentTemplate> </asp:UpdatePanel>

troverai:
- Script Manager (necessario per ajax)
- timer
- update panel agganciato al timer con i controlli da aggiornare definiti nel contenttemplate
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Uso visual studio 2005, lo scriptmanager l'ho inserito nel design, per ajax non so se è registrato correttamente, non ho toccato niente quando l'ho installato.

rossimarko Profilo | Guru

Ci sono delle cose da configurare nel web.config.

Controlla la guida: http://www.asp.net/AJAX/Documentation/Live/ConfiguringASPNETAJAX.aspx

Devi definire i controlli, aggiungere l'assembly e controllare le voci handlers e modules
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Ok, adesso provo a vedere.

Mi confermi che con il codice seguente dovrebbe entrare nel tick e scrivere sulle label?

Asp:

<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="5000" />

<asp:UpdatePanel ID="StockPricePanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
<ContentTemplate>
Stock price is <asp:Label id="StockPrice" runat="server"></asp:Label><br />
as of <asp:Label id="TimeOfPrice" runat="server"></asp:Label>
<br />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>


c#:

protected void Page_Load(object sender, EventArgs e)
{

}

protected void Timer1_Tick(object sender, EventArgs e)
{
StockPrice.Text = GetStockPrice();
TimeOfPrice.Text = DateTime.Now.ToLongTimeString();
}

private string GetStockPrice()
{
double randomStockPrice = 50 + new Random().NextDouble();
return randomStockPrice.ToString("C");
}

rossimarko Profilo | Guru

Si, non mi sembra di notare particolari anomalie.

L'unica cose se le label non dovessero aggiornarsi è specificare il nome dell'evento:

<asp:AsyncPostBackTrigger ControlID="Timer1" EvenName="Tick" />

se non ricordo male
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Il problema è che a me, come sempre, non entra proprio nel tick

rossimarko Profilo | Guru

In generale i controlli ajax funzionano?

prova ad inserire un pulsante dentro all'update panel e guarda se fa un postback asincrono o meno
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Ho aggiunto il bottone all'updatePanel e al click modifica la label.

rossimarko Profilo | Guru

>Ho aggiunto il bottone all'updatePanel e al click modifica la
>label.

Ma fa un postback completo della pagina oppure no? Se non è registrato bene ajax dovrebbe fare un postback completo.

Per capire se lo fa o meno puoi inserire una label fuori dall'update panel in cui visualizzi la data con i secondi. Il codice per la visualizzazione della data corrente mettilo nel pageload (senza if not ispostback). Se quando premi il pulsante si aggiorna anche la data allora ajax non funziona correttamente (viene aggiornata l'intera pagina), altrimenti si
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Mi fa l'update anche della label, però con il sito delle configurazioni che mi hai dato prima mi da errori e quindi alla fine non l'ho toccato.

Icechry Profilo | Junior Member

Questo problema c'entra col fatto che non entri nel tick del timer? Perchè per esempio nell'evento load ci va. A te scata l'evento tick?

rossimarko Profilo | Guru

>Mi fa l'update anche della label, però con il sito delle configurazioni
>che mi hai dato prima mi da errori e quindi alla fine non l'ho
>toccato.
>


Io ho provato il codice di esempio e funziona regolarmente. Ovviamente per far funzionare ajax bisogna configurarlo nel web.config altrimenti non andrà mai perchè non vengono registrati i moduli necessari alla gestione del codice ajax lato client.

Se mi dici che non hai modificato la configurazione direi che il problema è quello. In pratica l'evento del timer non viene generato, e quindi lato server non arriva la chiamata
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Allora il problema è quello. Ho provato a configurarlo con le indicazioni della pagina che mi hai dato tu, ma mi davano un pò di errori che non so correggere. Ho provato a vedere anche altri siti, ma non sono riuscito a configurarlo. Tu come hai fatto?

rossimarko Profilo | Guru

Che errori ti da?
Quando uso 2005 seguo le istruzioni di quella pagina, con il 2008 invece viene gestito in automatico
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

un pò, mi da errori sui moduli, sulle estensioni web e sulle config.

rossimarko Profilo | Guru

Ma quando lo esegui ti da errore?

Hai aggiunto le reference all'assembly System.Web.Extension? Ci vuole il messaggio di errore completo per capire meglio..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Sì, mi da errore quando eseguo, adesso provo a rifarlo da zero e se non va ancora ti posto gli errori.

Icechry Profilo | Junior Member

Ho creato un progetto solo con la web form del timer che ho postato sopra, il web config, senza toccare niente, è così:

<?xml version="1.0"?><configuration>

<appSettings/>
<connectionStrings/>

<system.web>
<compilation debug="true">
<assemblies>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>
<authentication mode="Windows"/>
</system.web>
</configuration>

Quali parti devo aggiungere di quello che è scritto sul sito di configurazione ajax per far andare il tutto?

rossimarko Profilo | Guru

>Ho creato un progetto solo con la web form del timer che ho postato
>sopra, il web config, senza toccare niente, è così:

Da quello che vedo stai usando visual studio 2008 (ti ha aggiunto degli assembly del framework 3.5), quindi nel web.config dovresti avere altre voci.

Comunque ti giro un'esempio appena creato con visual studio 2008 SP1:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

L'assembly che contiene le classi dedicate ad ajax è System.Web.Extensions, guarda dove viene usato e quelle sono le sezioni da aggiungere alla configurazione (httpmodules, httpHandlers ecc)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Sto usando visual studio 2005, però windows update mi ha installato l'aggiornamento fino al framework 3.5. Nel web config ho solo quello, l'ho postato tutto.

rossimarko Profilo | Guru

>Sto usando visual studio 2005, però windows update mi ha installato
>l'aggiornamento fino al framework 3.5. Nel web config ho solo
>quello, l'ho postato tutto.

Scusa, ma quel web.config l'ha creato visual studio 2005?

Mi sembra molto strano perchè gestisce solo framework 2.0.

Io ne ho creata una e mette solo questo:

<?xml version="1.0"?> <!-- Note: As an alternative to hand editing this file you can use the web admin tool to configure settings for your application. Use the Website->Asp.Net Configuration option in Visual Studio. A full list of settings and comments can be found in machine.config.comments usually located in \Windows\Microsoft.Net\Framework\v2.x\Config --> <configuration> <appSettings/> <connectionStrings/> <system.web> <!-- Set compilation debug="true" to insert debugging symbols into the compiled page. Because this affects performance, set this value to true only during development. Visual Basic options: Set strict="true" to disallow all data type conversions where data loss can occur. Set explicit="true" to force declaration of all variables. --> <compilation debug="false" strict="false" explicit="true" /> <pages> <namespaces> <clear /> <add namespace="System" /> <add namespace="System.Collections" /> <add namespace="System.Collections.Specialized" /> <add namespace="System.Configuration" /> <add namespace="System.Text" /> <add namespace="System.Text.RegularExpressions" /> <add namespace="System.Web" /> <add namespace="System.Web.Caching" /> <add namespace="System.Web.SessionState" /> <add namespace="System.Web.Security" /> <add namespace="System.Web.Profile" /> <add namespace="System.Web.UI" /> <add namespace="System.Web.UI.WebControls" /> <add namespace="System.Web.UI.WebControls.WebParts" /> <add namespace="System.Web.UI.HtmlControls" /> </namespaces> </pages> <!-- The <authentication> section enables configuration of the security authentication mode used by ASP.NET to identify an incoming user. --> <authentication mode="Windows" /> <!-- The <customErrors> section enables configuration of what to do if/when an unhandled error occurs during the execution of a request. Specifically, it enables developers to configure html error pages to be displayed in place of a error stack trace. <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> --> </system.web> </configuration>
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Sì, l'ha creato visual studio 2005. Al posto dei namespace a me ha messo gli assembly e basta. Non so se può influire il fatto che lo sto usando su vista. Per farlo andare ho scaricato dal sito della microsoft Aggiornamento Vs2005 sp1 per vista.

rossimarko Profilo | Guru

>Sì, l'ha creato visual studio 2005. Al posto dei namespace a
>me ha messo gli assembly e basta. Non so se può influire il fatto
>che lo sto usando su vista. Per farlo andare ho scaricato dal
>sito della microsoft Aggiornamento Vs2005 sp1 per vista.

Anche io ho vista e l'esempio è fatto proprio da un pc con le stesse caratteristiche.

Io però ho installato:
- Visual Studio 2005
- Service Pack 1 visual studio 2005
- Aggiornamento Service Pack 1 per windows vista

Hai fatto così anche tu?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Ho copiato il tuo web config e funziona alla perfezione.
Io ho installato:
- Microsoft Visual Studio 2005 Professional Edition
- Vs2005 SP1
- Aggiornamento Vs2005 SP1 per vista
- Microsoft .NET Frameworf 3.5 Service Pack 1

Ti posso chiedere un altro paio di cose semplicissime, ma che è un pò che ci sono dietro. Io ho fatto più che altro applicazioni e in quel caso erano molto più facili.

rossimarko Profilo | Guru

Si chiedi pure
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Il sito che sto facendo è composto da tre frame creati così:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Frame.aspx.cs" Inherits="ProvaTimer.WebForm2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<FRAMESET ROWS="15%,85%">
<FRAME SRC="" name = "Alto">
<FRAMESET COLS="15%,85%">
<FRAME SRC="" name = "Menu">
<FRAME SRC=">Home.aspx" name = "Principale">
</FRAMESET>
</FRAMESET>
</head>
<body>
<form id="form1" runat="server">
<div>
&nbsp;</div>
</form>
</body>
</html>

Quando devo chiudere una pagina del frame principale faccio ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "", "<script>window.close();</script>", false); ma non fa niente. Le ho provate tutte anche this.Page.ClientScript.RegisterClientScript(this.GetType(), "ModOk", "<script>window.close();</script>", true); ma niente.
L'unico modo per far qualcosa è mettere, al posto di windows.close(), windows.top.close(), ma così mi chiude tutto e non solo il frame Principale.

rossimarko Profilo | Guru

il comando close chiude la finestra, quindi se tu tenti di farlo su un frame non fa niente (giustamente).

Tu cosa vuoi fare? Se vuoi pulire il frame basta che imposti come url una pagina bianca e sei a posto.

Il close va usato quando si aprono nuove finestre
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Io vorrei solo chiudere la pagina e tornare a qualla visitata in precedenza. In pratica l'implementazione del tasto indietro del browser internet.

rossimarko Profilo | Guru

Se devi simulare il back allora in javascript c'è una funzione apposita: history.back()
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Ho provafo ma non fa niente.
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ModOk", "history.back();", true); mi fa apparire in alto a sinistra //]]>
invece con lo scriptmanager non fa nulla

rossimarko Profilo | Guru

Fai una prova più semplice.

Metti un pulsante con il codice history.back() sulla pagina contenuta nel frame. Poi guarda cosa succede. Ovviamente simulando il back torna alla richiesta precedente, quindi se hai modificato quel frame torna alla pagina prima del frame, ma se hai fatto altre operazioni non cambia la pagina del frame.
Comunque la funzione simula esattamente il back del browser
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Non ho capito cosa intendi, io per provare ho creato quei frame che ho postato, dove nel frame principale c'è un bottone continua che mi apre una pagina, sullo stesso frame, con un bottone indietro che dovrebbe tornare alla pagina prima. Però non fa niente con quella riga di codice.

rossimarko Profilo | Guru

>Non ho capito cosa intendi, io per provare ho creato quei frame
>che ho postato, dove nel frame principale c'è un bottone continua
>che mi apre una pagina, sullo stesso frame, con un bottone indietro
>che dovrebbe tornare alla pagina prima. Però non fa niente con
>quella riga di codice.

Il bottone come apre la pagina? fa un redirect lato server?

Facendo un esempio:
pagina1 chiama pagina2

pagina2 sarà sempre richiamata da pagina1? in questo caso basterebbe fare un redirect o mettere la chiamata direttamente a pagina1

history.back poi non manda alla pagina precedente ma alla richiesta precedente, quindi se hai dei pulsanti che fanno postback non funziona correttamente.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Sì, la pagina2 sarà sempre chiamata dalla 1. Per passare dalla pagina 1 alla 2 faccio un redirect. Poi per andare indietro vorrei proprio fare un back alla pagina prima, non un redirect, perchè in quel caso l'utente potrebbe fare indietro e la pagina che doveva essere chiusa c'è ancora. Vorrei fare un this.close() delle applicazioni per esempio.

rossimarko Profilo | Guru

Non puoi chiudere la pagina e comunque la history del browser è sempre attiva.

L'unica cosa è mettere un codice di controllo sulla pagina 2. Se ad esempio la pagina 2 conferma un'eliminazione puoi mettere nel pulsante di conferma il codice che verifica che non sia stata già cancellata, altrimenti apri la pagina in una nuova finestra e in quel caso funziona window.close e una volta chiusa non puoi più accederci
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Si può mettere, come in molti siti, che dopo la cancellazione in pagina 2 faccio una redirect in pagina 1, però se l'utente prova a fare back, esce la pagina cercata non esiste più o è scaduta.

Icechry Profilo | Junior Member

Si può mettere, come in molti siti, che dopo la cancellazione in pagina 2 faccio una redirect in pagina 1, però se l'utente prova a fare back, esce la pagina cercata non esiste più o è scaduta?

rossimarko Profilo | Guru

Devi gestire tu la cosa con del codice.

Prova a prendere spunto da questo che disabilita la cache del browser della pagina2: http://www.velocityreviews.com/forums/t295100-block-the-history.html

oppure guarda questa implementazione: http://forums.asp.net/t/1120854.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Quindi mi stai dicendo che non si può implementare una cosa tipo le 2 freccette avanti e indietro del browser? perchè nel caso del blocco della hystory se ho per esempio:

pagina 1, pagina 2, pagina 3

elimino qualcosa nella pagina 3, faccio la redirect nella pagina 2. Se blocco la cache, se faccio indietro dalla pagina 2 non torna più alla pagina 1.

Icechry Profilo | Junior Member

Ho risolto il problema per i pulsanti che tornano alla pagina precedente mettendone uno di tipo html e sull'onclick facendo windows.back(-1). Per il caso di una pagina di eliminazione, invece, come ti comporti di solito. Fai una redirect alla pagina precedente dopo aver effettuato la cancellazione del record da db? E poi come gestisci un eventuale indietro dal browser dell'utente alla pagina di cancellazione che non dovrebbe più apparire?
Grazie per l'aiuto che mi stai dando!

rossimarko Profilo | Guru

Di solito verifico che il record che sto per cancellare esista. Se non esiste perchè è già stato cancellato visualizzo un messaggio.

Così se anche l'utente schiaccia il pulsante indietro e per caso tenta di rifare l'operazione non succede niente
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Come fai a farlo? Se uno fa indietro non viene ricaricata la pagina e quindi si ritrova la stessa pagina di prima quando il record esisteva. Se lui prova a cancellarlo la seconda volta visualizzi il messaggio di errore? Prima non fai niete quindi?

rossimarko Profilo | Guru

Si, metto il check se lui tenta di cancellare ancora.

Per non farla ricaricare devi provare ad impostare il no-cache e l'expire della pagina, era riportato un esempio nei link che ti ho segnalato sulle possibili soluzioni
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

Ok, grazie. Ho un altro problema come ti dicevo, una cosa velocissima. C'è una textbox di tipo password che mi crea un problema. Nel senso che, in una pagina che consente di modificare dei dati, assegno al suo campo test un valore preso da db, poi però quando al click del tasto modifica cerco di riprendere il valore text me lo da sempre nullo. Ho provato a metterla single line come le altre e funziona tutto tranquillamente. Sai per quale motivo succede questo?

rossimarko Profilo | Guru

>Ok, grazie. Ho un altro problema come ti dicevo, una cosa velocissima.
>C'è una textbox di tipo password che mi crea un problema. Nel
>senso che, in una pagina che consente di modificare dei dati,
>assegno al suo campo test un valore preso da db, poi però quando
>al click del tasto modifica cerco di riprendere il valore text
>me lo da sempre nullo. Ho provato a metterla single line come
>le altre e funziona tutto tranquillamente. Sai per quale motivo
>succede questo?

E' molto strano, di solito questo problema si verifica in seguito ad un postback (se ci fai caso dopo un postback il campo è vuoto).

Sicuro che non vengano fatti altri postback prima di richiamare l'evento del tuo pulsante? In questo caso si spiegherebbe tutto, perchè la textbox normale mantiene il suo valore.
Qui ne parlano nel caso in cui uno voglia mantenere il valore tra un post e l'altro: http://forums.asp.net/p/1395018/2995024.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

>>Ok, grazie. Ho un altro problema come ti dicevo, una cosa velocissima.
>>C'è una textbox di tipo password che mi crea un problema. Nel
>>senso che, in una pagina che consente di modificare dei dati,
>>assegno al suo campo test un valore preso da db, poi però quando
>>al click del tasto modifica cerco di riprendere il valore text
>>me lo da sempre nullo. Ho provato a metterla single line come
>>le altre e funziona tutto tranquillamente. Sai per quale motivo
>>succede questo?
>
>E' molto strano, di solito questo problema si verifica in seguito
>ad un postback (se ci fai caso dopo un postback il campo è vuoto).
>
>Sicuro che non vengano fatti altri postback prima di richiamare
>l'evento del tuo pulsante? In questo caso si spiegherebbe tutto,
>perchè la textbox normale mantiene il suo valore.
>Qui ne parlano nel caso in cui uno voglia mantenere il valore
>tra un post e l'altro: http://forums.asp.net/p/1395018/2995024.aspx

Sì, ho controllato. Ho provato a mettere la stessa texbox, senza cambiare niente del codice, single line e non più password e funziona tutto. Appena la metto password si perde il valore.
Christian

rossimarko Profilo | Guru

Fai una prova con una pagina pulita. Inserisci un campo di tipo password identico a quello che ti crea problemi e un pulsante. poi prova a prelevare il valore della textbox all'interno del click del pulsante e vedi cosa succede. Se il valore ti viene ritornato correttamente vuol dire chè c'è qualcosa in quella pagina che crea problemi
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Icechry Profilo | Junior Member

>Fai una prova con una pagina pulita. Inserisci un campo di tipo
>password identico a quello che ti crea problemi e un pulsante.
>poi prova a prelevare il valore della textbox all'interno del
>click del pulsante e vedi cosa succede. Se il valore ti viene
>ritornato correttamente vuol dire chè c'è qualcosa in quella
>pagina che crea problemi

Ho già una pagina fatta così e funziona(quella di login). L'unica cosa che cambia tra le due è che quì assegno a una textbox di tipo password un valore da db e credo sia questo che crei dei problemi.
Chrstian

rossimarko Profilo | Guru

Prova a guardare qui se vuoi settare il valore: http://ryanfarley.com/blog/archive/2004/12/18/1300.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5