Newsgroup: it.comp.www.asp
Titolo: Href invece di submin

In una pagina ho un form che deve inviare dei dati in POST a se stessa e 
volevo evitare di usare "<input type="submit" value="elimina" 
name="elimina">" perchč crea dei pulsanti che, oltre che piuttosto 
brutti, anche troppo ingombranti e in una table con un elenco di record 
stanno male. Volevo quindi sostituire il button con un semplice Href.
Dopo varie ricerche su gugol ho tovato questa soluzione:
<Script language="JavaScript">	
  function invia() {
    alert("...");  
    document.forms[0].submit(); 
  }
</script>
.
.
<form action="ana_utenti.aspx" method="post">
  <a href="#" onclick="invia();return false;">Elimina</a>
  <input type="hidden" name="id" value="<%=myReader["id_utente"]%>">
</form>
Cosě sembrerebbe quasi funzionare ma c'č un problema. Nella parte di 
codice che poi dovrebbe essere eseguita quando la pagina č richiamata in 
post prima verificavo se esisteva l'elemento "elimina" per capire se 
dovevo procedere con la cancellazione:
<% 
  String sElimina = Request.Form.Get("elimina");
  if (sElimina != null) {
    //codice da eseguire
  }
%>
Il problema č che, prima di tutto, non posso piů controllare il campo 
"elimina" (e volevo sapere come fare per capire con efficacia se la 
pagina č stata richiamata in POST), e in secondo luogo il campo "id" 
contiene sempre lo stesso valore ed č sempre il primo della lista, 
nonostante nella pagina html generata il campo hidden sia valorizzato 
correttamente.
Sapreste aiutarmi a risolvere il problema? Eventualmente posso postare 
sia il codice html risultante sia altre parti del sorgente che 
potrebbero risultare utili.
Grazie
-- 
 __   __  ___   
|  | |  |/ __|  ICQ@Home #7317603sette 
|  |_|  |\__ \  ICQ@Work #16285702tre
|____|__||___/ 

 potrebbero risultare utili.
Dovrei aver capito il problema e spedito una risposta adeguata. Ti
suggerisco, inoltre, di mettere un tiemout nel javascript perche' spesso e
volentieri il form arriva misteriosamente vuoto al server, come se il client
perdesse tempo con i dati per qualche motivo.
Ciau
Andrea

 perdesse tempo con i dati per qualche motivo.
Purtroppo sono ancora un novellino.....inizio a mettere a posto il primo 
punto poi cercherň di fare anche questo, grazie


 lo stesso valore, indipendentemente da quele link "elimina" seleziono.
Se il tuo form deve fare piu' cose, forse, puoi servirti di Javascript in
maniera + massiccia (si fa per dire).
Il form diventa una cosa del genere:
<form action="ana_utenti.aspx" method="post">
   <a href="#" onclick="invia();return false;">Elimina</a>
   <input type="hidden" name="id" value="<%=myReader["id_utente"]%>">
  <select name='action'>
    <option value='elimina'>Elimina</option>
    <option value='aggiorna'>Aggiorna</option>
    <option value='aggiungi'>Aggiungi nuovo</option>
    <option value='modifica'>Modifica</option>
  </select>
</form>
Mentre nel codice infili un bel
select case request.form.get(cstrAction)
    case cstrElimina
        \\ codice da eseguire se il valore contenuto nella request, nella
variabile il cui nome e' contenuto nella costante cstrAction, e' uguale al
valore contenuto nella costante cstrElimina
    case cstrAggiorna
        \\ eccetera...
end select
Se poi invece di un menu' a tendina c'e' una serie di bottoni, allora la
pressione del pulsante (o il click sul link) prima di scatenare l'invio del
form mette nel campo
document.forms["nomeform"].action.value = strValue
dove strValue e' un parametro passato alla funzione invia()
Spero di essere stato chiaro, senno' domanda pure.
Quanto al fatto di essere niubbo... io 
ASP.NET
 ancora devo vedere come
funziona ^_______^ cmq alcune cose valgono sempre (vedi la risposta che ho
dato a Elisa, thread del 13/10/2002).
Ciau
Andrea

 dato a Elisa, thread del 13/10/2002).
grazie ma sono niubbo solo di asp, non di programmazione in genere: sono 
+ di 5 anni che programmo per lavoro (vb, java, cobol...sigh), ma a 
parte qualche prova in php questo č il mio primo progetto web (html e 
asp), e mi accorgo che ho ancora parecchie lacune in questo ambiente (e 
finchč non arrivano i testi che ho ordinato credo mi resteranno)


 </form>
E come vedi (maremmamaiala, ma mi spiego cosi' male? Sara' stata colpa
dell'assembler del C= 64?)  hai segato il campo che si chiamava elimina.
Tutto cio' che si chiama <input> viene infilato nella request, anche i
pulsanti.
Se togli i pulsanti devi dire alla tua applicazione che il form e' cambiato.
Se spedisci il form senza pulsanti, che per ASP (e credo anche per .net) e'
tutto cio' che e' compreso tra i due tag, vuol dire che mancano dei campi il
cui nome era quello dei pulsanti che ora hai tolto.
Anche se hai gia' pensato a come trattare i vari casi, il fatto che tu abbia
piu' pagine per le varie operazioni mi perplime un po'. Insomma, la
trattazione ad hoc dei record richiede, al massimo, 4 parametri:
connessione, nome della tabella, ID (chiave primaria) del record, dictionary
con nomi dei campi e relativa modifica.
Poi, se la chiave primaria manca e' un nuovo record da aggiungere, se il
dictionary e' vuoto il record e' da eliminare.
Se manca uno dei primi due parametri, invece, si ha un errore.
In questo modo hai 1 solo oggetto che si preoccupa di fare tutto quel che
c'e' da fare sui record e sai che, una volta testato, non dovrai piu'
modificarlo e lo riutilizzerai n volte.
Non solo: ti cambia ADO sotto al sedere tu te ne freghi, ti limiti a
modificare il tuo oggetto e tutte le altre applicazioni che hai scritto
continueranno a funzionare senza rompere l'animo.
Tornando a bomba sul tuo problemino:
Posta un po' il codice di quella pagina, magari ci capisco qualcosa di piu'
(e non solo io ;-) )
Ciau
Andrea

 (e non solo io ;-) )
Anche usando il tuo metodo di una pagina unica per aggiornare il db, il problema
persiste perchč proprio il parametro con la chiave primaria č quello che non
viene modificato quando viene fatto il post via Href (mentre funziona perfettamente
via submit da apposito bottone). Qui di seguito posto il codice di tutta la pagina, 
quindi mi scuso fin da ora per la lunghezza del post (e delle singole righe):
######################## inizio
<%@ Page Language="C#" %>
<!-- #include file="checklogin.inc" -->
<!-- #include file="connectdb.inc" -->
<!-- #include file="costanti.inc" -->
<%
	String sId = Request.Form.Get("id_utente");
	if (sId != null) {
		Response.Write("Cancello Id: " + sId);
		//qua ci va il codice che cancella la riga con l'ID indicato
		//e, nel mio caso, contiene sempre il medesimo valore
	} else {
		Response.Write("POST senza parametri");
	}
%>
<html>
<head>
	<title>Intranet Akzo</title>
	<link rel=stylesheet href="style.css" type="text/css">	
	<Script language="JavaScript">	
	function invia() {
		if (window.confirm('Procedo con la cancellazione?')) {
			document.forms[0].submit(); 
		} else {
			return false;
		}
	 }
	</script>
</head>
<body>
<h1 align="center">Gestione Utenti</h1>
<br>
<table align="center" border="1" width="50%">
<%
	String sQuery = "select * from ana_utenti order by codice_utente ";
	SqlCommand mySqlCommand = new SqlCommand(sQuery, dbConnection);
	SqlDataReader myReader = mySqlCommand.ExecuteReader();
	Boolean bColore = true;
	String sColoreCella;
 
	while (myReader.Read()) {
		if (bColore) 
			sColoreCella = CST_COLORE_RIGA_1;
		else
			sColoreCella = CST_COLORE_RIGA_2;
		bColore = !bColore;
%>
	<tr bgcolor="<%= sColoreCella %>">
		<td>
			<p><a href="ana_utenti_modifica.aspx?userid=<%= myReader["codice_utente"] %>"><%= myReader["codice_utente"] %></a></p>
		</td>
		<td>
			<p><%= myReader["nome"] + " " + myReader["cognome"] %></p>
		</td>
		<td width="15%"  align="center">
			<form action="ana_utenti2.aspx" method="post">
				<input type="hidden" name="id_utente" value="<%= myReader["id_utente"] %>">
				<a href="javascript:void(null)" onclick="invia();return false;">Elimina</a>
			</form>
		</td>
	</tr>
<%
	}
%>
</table>
<p align="center">
	<a href="ana_utenti_modifica.aspx?userid=nuovoutente">Nuovo Utente</a>
	<br><br>
	<a href="menu.aspx">Torna al menu</a>
</p>
</body>
</html>
<!-- #include file="closedb.inc" -->
######################## fine
Se vuoi vedere il funzionamento in diretta, fammi sapere che ti do l'indirizzo su cui 
č pubblicato.....
p.s.: dato che sono un novello di Asp, se vedete qualche macroscopico errore nella
scrittura delle pagine (ehm...magari tolgo il SE :-D), bombardatemi pure di critiche e
consigli, non sono nato imparato e non mi offendo assolutamente, anzi.....  ;-)


 consigli, non sono nato imparato e non mi offendo assolutamente, anzi.....
;-)
L'unica critica che posso mettere, ammesso che abbia senso quando la pagina
e' compilata, e' mettere HTML e script mischiati come fai tu. Io preferisco
servirmi di costanti e variabili fino alla nausea.
Guarda bene cosa ti arriva nella request.form()... di piu' non so dirti.
'guri.
Andrea

 Guarda bene cosa ti arriva nella request.form()... di piu' non so dirti.
Confermo quanto detto in precedenza....mi arriva sempre il medesimo 
valore e on so piů che pesci prendere :-(
Grazie per l'interessamento


 Grazie per l'interessamento
Cambia cosi' il form:
<form action="ana_utenti2.aspx" method="post">
<input type="hidden" name="id_utente" value="<%= myReader["id_utente"] %>">
<a href="javascript:void(null)" onclick="invia('<%=
myReader["id_utente"]');return false;">Elimina</a>
</form>
e lo script deve diventare:
<Script language="JavaScript">
function invia(strId) {
if (window.confirm('Procedo con la cancellazione di ' + strId + '?')) {
document.forms[0].submit();
} else {
return false;
}
}
</script>
E verifica che l'ID che mandi sia proprio quello giusto.
Se, da come ho capito adesso, tu vedi l'ID sbagliato (magari quello del
primo tentativo) tu vedi, non la risposta del server, ma la cache del tuo
browser.
Vuota la cache e riprova, se mi viene qualcos' altro in mente te lo dico.
Ciau
Andrea

 browser.
Puň essere, infatti per un problema di questo tipo avevo un altro 
malfunzionamento :-//
Ora sto facendo delle prove con i Webservices per cercare di 
implementare la soluzione che mi hai suggerito tu (un WS per tutte le 
operazioni di gestione delle tab. di anagrafiche)
