Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Ricavare variabile da codice VB

    Ho un'application Web con pagina aspx e aspx.vb, nella pagina vb ho una variabile (di tipo Integer dichiarata globale) che devo recuperare in una funzione di uno script javascript.
    Tale funzione viene chiamata nel codice HTML (pagina aspx) nell'OnClientClick di un Button.

    Il prob è che non riesco appunto a ricavare tale valore della variabile VB, ho provato con <%# nomeVar %>, <%@ nomeVar %>, <%= nomeVar %> ma non funziona

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non conosco il linguaggio lato server che citi, ma la sintassi generale per assegnare ad una variabile javascript il valore di una variabile vbscript e':

    variabileJs = '<%= variabileVb %>';

    Con gli opportuni aggiustamenti in caso di valore numerico

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    e' un'application Web realizzata in Visual Studio in asp.net dove il codice lato server sta nella pagina NomePagina.aspx.vb (scritta in VB quindi) mentre il codice HTML/ASP.NET sta nella pagina NomePagine.aspx.

    Nel codice lato server dichiaro la variabile (facciamo String) globale come Dim var1 as String, questa variabile va poi ad assumere dei valori in base a varie funzioni contenute in questa pagina di codice lato server.

    Lato client ho invece definito una funzione javascript che viene eseguita sull'OnClientClick di un button.
    Ora in questa funzione javascript vorrei ricavarmi il valore della variabile var1 ma non riesco

    Ho provato con var varJS = '<%= var1 %>' ma non funziona.

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ci sono diversi errori, purtroppo:

    1) presumere che tutti conoscano php o vb.net o c# in un forum che tratta di javascript

    2) dare informazioni discorsive senza un minimo di codice reale su cui discutere

    Comunque, (in mancanza di codice invento) tu crei una variabile di classe (non globale, che credo proprio che non esistano) e le metti l'attributo protected, non private. Questo perchè, credo, il motore crea una classe temporanea derivata sia dalla pagina del codice, sia dalla pagina html.

    Allora, nel codice metti, per esempio:

    codice:
    Option Strict On
    
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
        Protected var1 As String = "Pippo"
    
    End Class
    nella pagina aspx recuperi come ti è stato detto:

    codice:
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    var varJS = "<%= var1 %>";
    alert(varJS);
    
    // ]]>
    </script>
    Pietro

  5. #5
    Sarò tardo ma non mi funziona!

    Ho risolto inserendo nella pagina di progettazione un HiddenField nel quale, lato server, vado ad impostare il valore della variabile var1, Hiddenfield facilmente recuperabile lato client dallo script.

    Rimane però che mi piacerebbe capire come mai non mi funziona il passaggio della variabile var1 da ASP a javascript (con <%= var1 %>)

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da laplace82
    Sarò tardo ma non mi funziona!

    Ho risolto inserendo nella pagina di progettazione un HiddenField nel quale, lato server, vado ad impostare il valore della variabile var1, Hiddenfield facilmente recuperabile lato client dallo script.

    Rimane però che mi piacerebbe capire come mai non mi funziona il passaggio della variabile var1 da ASP a javascript (con <%= var1 %>)

    Scusami, io ho fatto una pagina di prova, copiato e incollato. Se non ti funziona è perchè la tua pagina è fatta con caratteristiche che non citi.

    Solo a titolo di esempio, se la tua pagina usa i temi, quella istruzione produrrà un errore del tipo:
    Impossibile modificare l'insieme Controls perché il controllo contiene blocchi di codice (ossia <% ... %>).

    E si risolve mettendo

    var varJS = "<%# var1 %>";

    e facendo, nell'evento load

    Me.Header.DataBind()

    Pietro

  7. #7
    Riporto di seguito una prova fatta su una banalissima application Web (quella su cui sto lavorando è troppo lunga per riportarla tutta): la pressione del button incrementa un contatore (lato server) che voglio visualizzare nel testo della Label (lato client).
    Cosa sbaglio?

    Pagina Default.aspx:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

    <!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>Prova di passaggio varibili lato server -> lato client</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>

    <asp:Button ID="Button1" runat="server" Text="Button" />




    <asp:Label ID="Label1" runat="server" Text='<%= Session("Conta") %>'></asp:Label>
    </div>
    </form>
    </body>
    </html>



    Pagina Default.aspx.vb:

    Partial Class _Default
    Inherits System.Web.UI.Page

    Dim count As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then ' Primo avvio dell'Application Web
    Session("Conta") = "0"
    Label1.Text = Session("Conta")
    Else ' PostBack causato dal click sul Button
    count = CType(Session("Conta"), String)
    End If
    End Sub


    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    count = Integer.Parse(Session("Conta")) + 1
    Session("Conta") = count.ToString
    End Sub
    End Class

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ecco, con un po' di codice si ragiona meglio. Ci sono diversi errori:

    1) Dentro un controllo server non funziona la sintassi:
    <%=variabile_server%>

    ma devi mettere eventualmente:
    <%#variabile_server%>

    e contemporaneamente devi mettere, per esempio nel load:
    Me.MioControllo.DataBind()


    2) Non hai messo l'istruzione più importante:
    Option Strict On

    Questa istruzione permette di far lavorare il basic decentemente, come il c#


    Comunque, prova così:

    pagina aspx
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="prove_Default" %>
    
    <!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 id="Head1" runat="server">
        <title>Prova di passaggio varibili lato server -> lato client</title>
    
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    window.onload = function()
        {
            var count = <%=count %>;
            document.getElementById("span1").innerHTML = count;
        };
    
    // ]]>
    </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" />
            
    
            
    
            count lato server: <asp:Label ID="Label1" runat="server" ></asp:Label>
            <hr />
            count lato client: <span id="span1"></span>
        </div>
        </form>
    </body>
    </html>

    pagina di codice
    codice:
    Option Strict On
    
    Partial Class prove_Default
        Inherits System.Web.UI.Page
    
        Protected count As Integer
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then ' Primo avvio dell'Application Web 
                Me.Session("Conta") = 0
                Label1.Text = Session("Conta").ToString
            End If
        End Sub
    
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            count = CInt(Session("Conta")) + 1
            Session("Conta") = count
            Label1.Text = count.ToString
        End Sub
    End Class

    L'ho provato e va. Prova adesso ad utilizzare i temi e metti nel web.config questo:
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <appSettings/>
        <connectionStrings/>
        <system.web>
          <pages styleSheetTheme="Tema1"></pages>
        </system.web>
    </configuration>
    Pietro

  9. #9
    Originariamente inviato da pietro09
    Ecco, con un po' di codice si ragiona meglio. Ci sono diversi errori:

    1) Dentro un controllo server non funziona la sintassi:
    <%=variabile_server%>

    ma devi mettere eventualmente:
    <%#variabile_server%>

    e contemporaneamente devi mettere, per esempio nel load:
    Me.MioControllo.DataBind()
    saresti così gentile da postarmi anche il codice sviluppato in questo modo?

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Se metti quel web.config (imposti un tema) ti dà questo errore:

    Impossibile modificare l'insieme Controls perché il controllo contiene blocchi di codice (ossia <% ... %>).

    una soluzione è questa:

    questa è la funzione javascript di prima in cui valorizzi una variabile javascript con una variabile server (nota # invece di =)
    codice:
    window.onload = function()
        {
            var count = <%#count %>;
            document.getElementById("span1").innerHTML = count;
        };
    Nel codice puoi fare:
    codice:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then ' Primo avvio dell'Application Web 
                Me.Session("Conta") = 0
                Label1.Text = Session("Conta").ToString
            End If
    
            Me.Header.DataBind()
        End Sub
    
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            count = CInt(Session("Conta")) + 1
            Session("Conta") = count
            Label1.Text = count.ToString
            Me.Header.DataBind()
        End Sub
    nota Me.Header.DataBind() in cui dice esplicitamente di fare il bind di count
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.