Imglobare codice javascrip-client lato server

venerdì 31 marzo 2006 - 18.00

6969 Profilo | Junior Member

Cari amici,
con asp.net mi sembra di capire che non è facile conciliare il codice server da quello client.
Vorrei lanciare una funzione javascrip che funziona lato client attraverso una sub lato server:
Ho provato a scrivere qualcosa del tipo:

sub lato_server(..)
response.write("<script language=""javascript"">window.open 'follow.aspx', '',');</script>"))
end sub

mi fa un casino incredibile su tutta la formattazione della pagina e non so se è giusto usare il response.write..

Potete iutarmi??
grazie
alessandro

micto27 Profilo | Senior Member

>Cari amici,
>con asp.net mi sembra di capire che non è facile conciliare il
>codice server da quello client.
>Vorrei lanciare una funzione javascrip che funziona lato client
>attraverso una sub lato server:
>Ho provato a scrivere qualcosa del tipo:
>
>sub lato_server(..)
>response.write("<script language=""javascript"">window.open
>'follow.aspx', '',');</script>"))
>end sub
>
>mi fa un casino incredibile su tutta la formattazione della pagina
>e non so se è giusto usare il response.write..
>
>Potete iutarmi??
>grazie

A tale scopo ti possono essere comodo qualcosa del genere:

If (Not Me.Page.IsClientScriptBlockRegistered("pippo")) Then
Me.Page.RegisterClientScriptBlock("pippo", scriptString)
End If

è come se la pagina disponesse di una collezione di script lato client dove
ogni script è associato ad una chiave.
Nell'esempio:

scriptString è la stringa contenente lo script client
"pippo" è la chiave associata a tale script

se lo script non è già stato registrato nella collezione (IsClientScriptBlockRegistered)
allora il metodo RegisterClientScriptBlock si occupa di registrarlo e di fartelo trovare
sul rendering della pagina.

Ciao, Michele


6969 Profilo | Junior Member

Innanzitutto grazie,

ora provo come consigliato, solo una cosa: con stringaScript intendi direttamente il codice client comprensivo dei tag di definizione del linguaggio, come::

("<script language=""javascript"">window.open 'follow.aspx', '',');</script>"))

oppure intendi il nome della funzione o sub da richiamare che è già scritta lato client??

grazie ancora
alessandro

micto27 Profilo | Senior Member

>Innanzitutto grazie,
>
>ora provo come consigliato, solo una cosa: con stringaScript
>intendi direttamente il codice client comprensivo dei tag di
>definizione del linguaggio, come::
>
>("<script language=""javascript"">window.open 'follow.aspx',
>'',');</script>"))
>
>oppure intendi il nome della funzione o sub da richiamare che
>è già scritta lato client??
>
>grazie ancora
>alessandro
>

la prima delle due: "<script language=""javascript"">window.open 'follow.aspx',
>'',');</script>"

ciao, Michele

6969 Profilo | Junior Member

Scusami se ti disturbo, ma ancora non risolvo:

ti scivo il codice forse puoi aiutarmi ancora:

In poche parole quando seleziono una riga del dataGrid vorrei che si aprisse con codice Jscript una finestra PoPUp con info relative alla riga selezionata. Ora il prob. è che scrivendo il codice in questo modo:

sub Seleziona_RigaDG (s As Object, e As DataGridCommandEventArgs)

If (Not Me.Page.IsClientScriptBlockRegistered("pippo")) Then
Me.Page.RegisterClientScriptBlock("pippo", "<script anguage=""javascript"">window.open 'follow.aspx' </script>")
End If

end sub

continua a farmi un casino sulla formattazione e dopo in quale punto dovrei eventualmente registrare il codice client per legarlo alla sua chiave ("pippo") ??

grazie ancora
alessandro

micto27 Profilo | Senior Member

>Scusami se ti disturbo, ma ancora non risolvo:
>
>ti scivo il codice forse puoi aiutarmi ancora:
>
>In poche parole quando seleziono una riga del dataGrid vorrei
>che si aprisse con codice Jscript una finestra PoPUp con info
>relative alla riga selezionata. Ora il prob. è che scrivendo
>il codice in questo modo:
>
>sub Seleziona_RigaDG (s As Object, e As DataGridCommandEventArgs)
>
>If (Not Me.Page.IsClientScriptBlockRegistered("pippo")) Then
>Me.Page.RegisterClientScriptBlock("pippo", "<script anguage=""javascript"">window.open
>'follow.aspx' </script>")
>End If
>
>end sub

Un'ipotesi potrebbe essere quella di prevedere una funzione javascript denominata ad esempio
ApriDettaglio(idRiga) con un parametro coincidente con l'identificativo della riga sulla quale
effettuare lo zoom.
Tale funzione non serve venga registrata lato server e potresti prevederla direttamente nel codice della pagina aspx
o meglio in un file js.
A questo punto puoi prevedere su ogni riga del datagrid un Hyperlink e in fase di DataBind andresti a valorizzarne
la proprietà NavigateUrl con la frase:
javascript:ApriDettaglio(xxxx); con xxxx uguale all'identificativo della riga della quale si sta facendo il Bind.

es.

function ApriDettaglio(rigaId)
{
var w = 800;
var h = 600;
var url = 'follow.aspx?riga=' + rigaId
win = window.open(url, 'follow', 'scrollbars=yes, resizable=yes, width='+ w +', height='+ h +', status=no, location=0,toolbar=0,menubar=1');
}

ciao, Michele

6969 Profilo | Junior Member

Scusa se ti rispondo solo ora, comunque grazie ancora, ho provato come mi hai suggerito e come temevo ho problemi a passere (oppure, forse riesco a passarlo ma non riesco ad intercettarlo) il valore della riga selezionata alla funzione client. Comunque la finestra "zoom" si apre e non mi da nessun errore

<SCRIPT language="JavaScript"><!--
function apri_riga(valore_riga) {
window.open('CLINICAL_ACCOUNT_INFO.aspx?riga=' + valore_riga, 'follow','width=250,height=200,scrollbars=no,toolbar=no')
}
//--></SCRIPT>
...
...
<asp:datagrid ..........>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate> prova</HeaderTemplate>
<ItemTemplate><A style="FONT-SIZE: 10pt; Font-Names: Arial" href="javascript:apri_riga('DataGrid1.DataKeys(e.Item.ItemIndex).ToString', '');">prova</A>
</ItemTemplate> </asp:TemplateColumn>
...
..
Cosa ne pensi, forse siamo vicini alla soluzione
grazie
alessandro

micto27 Profilo | Senior Member

Ciao,
nell' ItemTemplate del datagrid prova ad utilizzare un controllo di tipo Hyperlink
più o meno così configurato:

<ItemTemplate>
<asp:Hyperlink id="hypZoom" CssClass="classe di stile" runat="server" NavigateUrl="javascript:apri_riga(" + <%# DataBinder.Eval(Container, "ItemIndex") %>" + ");"
</ItemTemplate>

Michele

6969 Profilo | Junior Member

Ok
grazie
ora provo

a dopo ale

6969 Profilo | Junior Member

Ti ringrazio di tutti i consigli, alla fine ho (vista la mia poca dimistichezza con jvscript) ho preferito utilizzare HyperLinkColumn in questo modo

<asp:HyperLinkColumn Text="dettagli" Target=_blank DataNavigateUrlField="ACCOUNT_CENTER" DataNavigateUrlFormatString="CLINICAL_ACCOUNT_INFO.aspx?retry={0}" HeaderText="Dettagli"></asp:HyperLinkColumn>

ciao
ale
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