8 messaggi dal 31 gennaio 2008
Salve. Ho letto il libero Asp 3.5 per tutti perchè sto passando dal vecchio asp a .net. Mi sto imbattendo in un problema di forms multipli.
In sostanza il sito è strutturato con masterpage e usercontrol. Nella header c'è il form di ricerca di google (quindi solo linguaggio html senza attributo runat). In automatico, quando si crea una masterpage, viene inserito un form con attributo runat="server" subito dopo il body. Di conseguenza il form della ricerca è finito dentro il form runat="server". Il risultato è che nella pagina del login, in cui è stato inserito un altro form per il login, fa casino perchè ad esempio il submit del pulsante di ricerca fa il post anche del form del login. Ho trovato questa soluzione: ho inserito il tag form con runat più sotto del form di ricerca in modo che non si concatenassero.
Ma il problema mi rimane poi più avanti: nella colonna destra ho necessità di usare sia server control (ad esempio "bullelist") sia forms "normali" per dei sondaggi (anche più di uno). Il "bullelist", per funzionare, deve stare dentro ad un form con runat="server", ma in questo modo i form dei sondaggi risultano interni ad esso e mi fa casino. Stesso problema poi per gli user control, che sono interni alla masterpage, dove avrei la necessità di creare dei form separati. Quale è la soluzione strutturale per risolvere il problema? Grazie.
pollicino wrote:
Quale è la soluzione strutturale per risolvere il problema? Grazie.

fare form separati. se hai bisogno di controlli che fanno il PostBack, devi struttuare la pagina in modo che stiano nella webform. ma ce ne sono alcuni che ne hanno bisogno anche se non lo usi davvero. in questi casi io preferisco optare per alternative. ad esempio per un elenco puntato un semplice Repeater. in definitiva, la webform deve essere una sola ma niente e nessuno ti vieta di tenerne altre "normali" fuori.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
8 messaggi dal 31 gennaio 2008
Salve Daniele, la ringrazio molto per la risposta.
Scusi se approffito della sua disponibilità, ma ci sono alcuni punti della risposta che desidero approfondire per vededere se ho capito tutto.

1) <<la webform deve essere una sola>>. Significa che posso avere un solo form con runat="server" giusto?

2) <<nessuno ti vieta di tenerne altre "normali" fuori>> significa che posso avere anche altri form non lato server che però devono stare necessariamente fuori dai tag <form runat="server"</form>, cioè devono essere prima o dopo di questo?

3)<<devi struttuare la pagina in modo che stiano nella webform>>. Si riferisce ad esempio al controllo bullestlist che, anche se non fa il postback, deve stare dentro la webform giusto?

4) <<per un elenco puntato un semplice Repeater>>. Il controllo repeater quindi, per funzionare, non ha bisogno di stare dentro la webform? Avevo anche provato con un <ul runat="server"> e mi sembrava funzionare lo stesso, ovviamente avevo a disposizione solo il metodo ".innertext".
Se non chiedo troppo, quali sono i controlli che necessariamente devono stare dentro la web form, oltre al bullelist?

5) Solitamente qual è la struttura intelligente di una masterpage a 3 colonne? Io ho pensato a mettere il form runat="server" all'inizio del container della colonna centrale (chiuso in fondo al container), in modo da lasciare "libera" la colonna di sinistra per fare il "login" (manuale), la destra per eventuale form di sondaggio. Se in queste 2 colonne ho bisogno di inserire dei controlli possono scegliere tra quelli che non hanno bisogno del postback (tipo repeater). Ha senso quello che ho ipotizzato?

Chiedo scusa per la lunghezza della riposta, ma siccome sono concetti fondamentali vorrei essere sicuro di averli capiti correttamente e partire con una struttura del layout corretta e flessibile.
Grazie Andrea.
pollicino wrote:
1) <<la webform deve essere una sola>>. Significa che posso avere un solo form con runat="server" giusto?

esatto.

2) <<nessuno ti vieta di tenerne altre "normali" fuori>> significa che posso avere anche altri form non lato server che però devono stare necessariamente fuori dai tag <form runat="server"</form>, cioè devono essere prima o dopo di questo?

possono essere ovunque. quello che non è lato server (cioè non ha runat="server") può essere posizionato ovunque.

3)<<devi struttuare la pagina in modo che stiano nella webform>>. Si riferisce ad esempio al controllo bullestlist che, anche se non fa il postback, deve stare dentro la webform giusto?

mi riferisco a quei controlli che se sono fuori vanno in errore. probabilmente bullettedlist è uno di questi, perchè eredita dai data control, anche se poi non fa PostBack.


4) <<per un elenco puntato un semplice Repeater>>. Il controllo repeater quindi, per funzionare, non ha bisogno di stare dentro la webform? Avevo anche provato con un <ul runat="server"> e mi sembrava funzionare lo stesso, ovviamente avevo a disposizione solo il metodo ".innertext". Se non chiedo troppo, quali sono i controlli che necessariamente devono stare dentro la web form, oltre al bullelist?

semplice: tutti quelli che fanno PostBack. per quanto riguarda il databinding, le strade sono due:
- si usa un repeater con template, che non ha bisogno di webform - si costruisce un custom control con supporto al databinding: http://www.aspitalia.com/script/914/Custom-Control-Supporto-Databind-ASP.NET -2.0.aspx

non ho detto che la seconda fosse facile

5) Solitamente qual è la struttura intelligente di una masterpage a 3 colonne? Io ho pensato a mettere il form runat="server" all'inizio del container della colonna centrale (chiuso in fondo al container), in modo da lasciare "libera" la colonna di sinistra per fare il "login" (manuale), la destra per eventuale form di sondaggio. Se in queste 2 colonne ho bisogno di inserire dei controlli possono scegliere tra quelli che non hanno bisogno del postback (tipo repeater). Ha senso quello che ho ipotizzato?

dipende. in linea di massima è corretto, io preferisco non mettere la webform nella master page, ma farlo direttamente nella singola pagina, se e quando serve. non tutte le pagine fanno postback e non mettere la webform ha l'effetto che non viene generato ViewState che di fatto è inutile.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
8 messaggi dal 31 gennaio 2008
Perfetto, ora ho le idee molto più chiare!
Seguirò il suo consiglio e metterò il <form runat="server"> solo nelle pagine che fanno postback (così evito di appensatirla con il Viewstate).

L'unico punto che ancora non mi è chiaro è relativo al punto 2:
2) <<i form normali possono essere ovunque. quello che non è lato server (cioè non ha runat="server") può essere posizionato ovunque.>>

Se non ho capito male quindi un <form> normale può essere posizionato ovunque, anche dentro la webform.
Però quando ho un <form> dentro un <form>, il funzionamento non è più corretto.
Infatti avevo una pagina in cui, dentro il <form runat="server">, avevo due textbox e un pulsante di submit per il login, e avevo anche un <form></form> normale con un box di ricerca. Il problema è che quando facevo il submit del form di ricerca in realtà veniva fatto il submit del form principale (come se avessi premuto il pulsante del login), cioè i due form interferivano. Quindi ho dovuto mettere fuori il form della ricerca da quello runat="server".

Quindi è corretto che il <form> normale debba essere posizionato dentro la webform solo se non ho altri controlli che fanno il postback (ad esempio un bottone di login)?
Grazie.
pollicino wrote:
Se non ho capito male quindi un <form> normale può essere posizionato ovunque, anche dentro la webform.
Però quando ho un <form> dentro un <form>, il funzionamento non è più corretto.

può esserlo, ma non funziona perchè 2 form non si possono annidare
Quindi è corretto che il <form> normale debba essere posizionato dentro la webform solo se non ho altri controlli che fanno il postback (ad esempio un bottone di login)?

no, non vanno mai annidati, per il resto si possono mettere ovunque.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
8 messaggi dal 31 gennaio 2008
Perfetto, ora è tutto chiaro!
Grazie mille per la disponibilità! Ora mi diverto a scrivere un po' di codice
Buonagiornata!

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.