Visualizzazione dei risultati da 1 a 10 su 10

Discussione: UserControl [c#]

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118

    UserControl [c#]

    Salve a tutti, ho creato un UserControl .ascx correttamente, ma dovrei crearlo via script e non via tag html. Il control si chiama "Ciao".
    Come posso dichiararlo ed aggiungerlo via script? Io credevo che una volta registrato il controllo nella mia pagina aspx bastasse dichiararlo così: Ciao nome = new Ciao();
    invece mi dà errore...

    Vi ringrazio anticipatamente

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Se non sbaglio c'è la funzione Page.LoadControl a cui passi il percorso del file .ascx.

    ciao, javalon

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    Ti ringrazio!

    Ancora una piccola domanda: il mio usercontrol ha dei parametri che bisogna immettere per crearlo e farlo funzionare correttamente. Come posso inviare queste variabili via script?

    Ad esempio il mio usercontrol deve ricevere una data per funzionare correttamente, questa data è stata dichiarata nello usercontrol con il nome di "dataz".

    Quindi ho fatto:

    UserControl ciao = Page.Load("CountdownW.ascx");
    ciao.dataz = DateTime.Now;


    Però mi dice che lo UserControl non contiene una definizione per dataz.
    Ed inoltre mi dà il seguente errore: Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.UserControl'. An explicit conversion exists (are you missing a cast?)

    Come posso inoltrare il mio valore al parametro e risolvere il problema precedente?

    Grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Un esempio (spero che la sintassi sia giusta, non programmo in c#...):

    MyUserControl uct=(MyUserControl) Page.Load("MyControl.ascx");
    MyUserControl.dataz= DateTime.Now;

    Attenzione: il tuo controllo deve derivare da UserControl e non da Control.

    ciao, javalon

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    Non esiste l'oggetto MyUserControl, ma solo UserControl.

    Ho fatto così:

    UserControl ciao = (UserControl)Page.LoadControl("CountdownW.ascx");
    ciao.dataz = DateTime.Now;


    Ma mi dà sempre lo stesso errore (mentre ora l'errore di cast è stato risolto).


  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Ho usato il nome MyUserControl come esempio
    Comunque...
    :master: Vediamo se ho capito: la variabile dataz è quindi una variabile che va dichiarata in un blocco script per le tue funzioni javascript?
    In questo caso tu potresti avere una proprietà (o un membro pubblico) che la rispecchia (DataZ) , la valorizzi come nel codice che hai postato e nell'evento Pre_render del controllo puoi registrare uno script così:
    (lo posto in VB6, mi spiace ma la sintassi c# non la conosco molto bene!)

    codice:
    Dim Str as string
    Str="<script language=""javascript"">" & vbcrlf & _
    "var dataz=" & Me.PropertyDataZ.ToString(<eventuale_formato>) & ";" & vbcrlf & "</script>"
    Page.RegisterClientScriptBlock("dataz",str)
    Spero di aver capito la tua richiesta....
    ciao, javalon

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    Dunque, mi spiego meglio

    Io ho un controllo di nome CountdownW.ascs con questo codice:

    codice:
    <%@ Control Language="C#" ClassName="Countdown" %>
    
    <script runat="server">
        
        public DateTime dataz;
    
    </script>
    
    <html>
    <script src="countdown-clock.js" type="text/javascript"></script>
    <body>
    
    <script type="text/javascript">countdown_clock(<%= Convert.ToInt32((dataz.Year).ToString().Substring(2)) %>, <%= dataz.Month %>, <%= dataz.Day %>, <%= dataz.Hour %>, <%= dataz.Minute %>, 1);</script>
    
    </body>
    </html>

    Lo posso dichiarare esplicitamente in qualsiasi pagina con il solito metodo:


    codice:
    <%@ Page Language="C#" %>
    <%@ Register TagPrefix="CountdownW" TagName="countdownz" Src="~/Utente/CountdownW.ascx" %>
    
    <script runat="server">
        public void Page_Load(Object o, EventArgs e)
        {
            ciao.dataz = (DateTime.Now).AddDays(3);
        }
    </script>
    
    <!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>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <CountdownW:countdownz ID="ciao" runat=server />    
        </div>
        </form>
    </body>
    </html>

    Il problema è che io devo crearlo via script non con questo metodo, ma attraverso quello che ho descritto nei miei post precedenti (per motivi che non vi sto qui a spiegare). In pratica il controllo poi lo devo aggiungere ricorsivamente in una tabella attraverso il comando Cella.Controls.Add(miocontrollo).
    Il problema è che devo dichiararlo e passargli una data come parametro per farlo funzionare.


    Sono stato un po' più chiaro?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Si può fare così:
    - dichiari un campo/proprietà pubblica nel codice vb, "DataZ", che puoi impostare direttamente dalla pagina che contiene il controllo;
    - lo script che tu hai inserito già nella pagina lo registri all'evento Pre_render della pagina sostituendo direttamente l'espressione di binding con il risultato.

    Per esempio:
    codice:
    Dim Str as String="<script type=""text/javascript"">" & vbcrlf & _
    "countdown_clock(" & Convert.ToInt32((DataZ.Year).ToString().Substring(2))  & ", " & DataZ.Month & ", " & DataZ.Day  & ", " & DataZ.Hour & ", " & DataZ.Minute & ", 1);" & vbcrlf & </script>"
    Page.RegisterClientScriptBlock("scriptcountdownclock",Str)
    Questa può essere una soluzione.
    Altrimenti passo la palla a chi ne sa più di me...

    ciao, javalon

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    La funzione Page.RegisterClientScriptBlock è stata sostituita perchè obsoleta, comunque ho fatto come mi hai detto te in questo modo:

    codice:
    String Str ="<script type=\"text/javascript\">countdown_clock(" + Convert.ToInt32((DataZ.Year).ToString().Substring(2)) + ", " + DataZ.Month + ", " + DataZ.Day  + ", " + DataZ.Hour + ", " + DataZ.Minute + ", 1);</script>";
    ClientScript.RegisterClientScriptBlock(this.GetType(), "CountdownW", Str);
    Ora però ho una piccola domanda: come faccio ad aggiungere il mio blocco script all'interno della cella della mia tabella in modo che il controllo compaia?

    Grazie ancora, Javalon mi sei stato di grandissimo aiuto!

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Rileggendo ho notato una mia piccola imprecisione VVoVe: , il codice di registrazione dello script lo devi richiamare al PreRender del controllo, non della pagina...
    Comunque...
    La funzione countdown_clock dovrebbe restituire un valore da scrivere nella cella della tabella, giusto?
    Basta che modifichi il tuo codice script così:
    codice:
    <script language="javascript">
    document.writeln(countdown_clock(...));
    </script>
    In questo modo scrive il risultato direttamente nel punto in cui hai posizionato il controllo.

    A questo punto basta che tu aggiunga il controllo (o i controlli) nelle celle che vuoi e il gioco è fatto.

    ciao, javalon

    ... e buone feste!

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.