none
ScriptManager.RegisterClientScriptInclude in mvc3 RRS feed

  • Domanda

  • Ho un problema in quanto ho queste due istruzioni:

     

    ScriptManager.RegisterClientScriptInclude(CanvasCell , typeof(TableCell), "pen", "Scripts/pen.js");
          ScriptManager.RegisterStartupScript(CanvasCell, typeof(TableCell), "LogoJavaScript", fd.script, true);

     


    che mi danno errore in quanto il controllo canvascell è null.
    Mi spiego meglio
    sto migrando un progetto asp.net classico in mvc3 e queste due istruzioni servono ad includere uno script javascript in una cella di tabella, infatti canvascell è l'ID della cella di tabella dove lo script deve essere incluso.
    In asp.net classico non ci sono problemi in quanto canvascell è un'oggetto riferito al'ID della cella.
    Il problema invece è in mvc3 in quanto canvascell non viene riconosciuto nonostante io abbia chiamo l'id della cella con lo stesso nome, proprio perchè vi è una diversa integrazione tra la view e il controller rispetto a asp.net classico in cui si possono gestire molto meglio questa parte grafica di presentazione.
    Ora la mia domanda è come posso risolvere questo problema?
    Ci sono altre istruzioni oltre a queste che mi permettono di includere lo script ed eseguirlo in modo da evitare il controllo canvascell oppure come faccio a far riconoscere canvascell ad mvc dicendogli che è l'id presente nella view?
    giovedì 1 settembre 2011 15:34

Risposte

Tutte le risposte

  • Puoi registrare i javascript semplicemente nel tag head (o meglio prima della chiusura del body).

    Se devi eseguire dei metodi specifici al termine del caricamento della pagina poi puoi usare jQuery:
    <script type="text/javascript">
    $(document).ready(function() {
        YourFunction();
    });
    </script>
    



    Matteo Migliore

    Bloghttp://blogs.ugidotnet.org/matteomigliore
    Twitterhttp://twitter.com/matteomigliore
    CodePlex
    giovedì 1 settembre 2011 22:39
  • ho già provato mettendolo nel tag head (della pagina layout.cshtml) ma non funziona , anzi addirittura non mi visualizza più la pagina.

    quale altra soluzione posso provare?

     

    io l'ho incluso con questa istruzione ma niente:

    <script src="@Url.Content("/Scripts/pen.js")" type="text/javascript" >


    Il problema è che devo usare per forza quelle due istruzioni perchè dentro lo script ci sono riferimenti alla proprietà canvascell quindi poi comunque lo script non funzionerebbe anche se riesco ad includerlo, quindi mi per risolvere il problema devo applicare quelle due istruzioni in mvc3 ma non sò come fare...non cè una soluzione?
    • Modificato mvc33 venerdì 2 settembre 2011 09:32
    venerdì 2 settembre 2011 07:12
  • Devi chiudere il tag <script ...></script>, non usare la sintassi self-close (<script ... />) che non è supportat per questo tag.

    Il fatto che aggiungendolo la pagina non venga visualizzata dipende da che cosa fa quel file. C'è qualche metodo eseguito all'avvio della pagina nel file pen.js?
    Matteo Migliore

    Bloghttp://blogs.ugidotnet.org/matteomigliore
    Twitterhttp://twitter.com/matteomigliore
    CodePlex
    venerdì 2 settembre 2011 10:04
  • in pratica ci sono queste istruzioni al carcamento della pagina:

    string

     

     

    script = System.IO.File.ReadAllText(Server.MapPath("Sample.txt"));
                ViewData["txtLogoSource.Text"] = script;
                return View();

    venerdì 2 settembre 2011 10:11
  • ma anche tralasciando ora il fatto dell'inclusione , il problema in se per sè non è come includere lo script ma come utilizzare quelle due istruzioni in javascript.

    Mi spiego, con quelle dure istruzioni io includo ed eseguo lo script nella zona canvas cell dove vi sono riferimenti anche nello script stesso.

    In pratica prima di quelle due istruzioni ho questo:

    fd.script= System.IO.File.ReadAllText(Server.MapPath("Initialization.txt"));
                var ret = LogoParser.LogoUnit.Parse(fd.script);
                
                StringBuilder sb = new StringBuilder();
                fd.script += ret.Unit.GenerateJScript(ref sb).ToString();
                fd.script += Environment.NewLine + System.IO.File.ReadAllText(Server.MapPath("Finalization.txt"));
                ScriptManager.RegisterClientScriptInclude(CanvasCell , typeof(TableCell), "pen", "Scripts/pen.js");
                ScriptManager.RegisterStartupScript(CanvasCell, typeof(TableCell), "LogoJavaScript", fd.script, true);
          
    
                string script = System.IO.File.ReadAllText(Server.MapPath("Sample.txt"));
                ViewData["txtLogoSource.Text"] = script;
                script=fd.script;
                Session["Script"] = script;
                
               
                return View();

    e l'errore che mi dà è che non trova il controllo canvascell

    venerdì 2 settembre 2011 10:23
  • Non è chiaro cosa devi fare.

    Questo è codice C# che ovviamente non può funzionare in un file JS.

    Spiega meglio cosa vuoi fare.
    Matteo Migliore

    Bloghttp://blogs.ugidotnet.org/matteomigliore
    Twitterhttp://twitter.com/matteomigliore
    CodePlex
    venerdì 2 settembre 2011 10:42
  • allora in pratica nella text area chiamata txtlogosource ci sono codici scritti in linguaggio logo quindi con quelle due istruzioni io eseguo lo script che leggendo il linguaggio logo attraverso la variabile fd.script che contiente i dati logo presenti nella textarea lo converte in javascript e visualizza il disegno nell'area che si chiama canvas cell che sarebbe l'ID di una cella della tabella, all'interno di questa cella di tabella poi cè il tag canvas che permette la visualizzazione.


    Ora ho trovato il modo per poter inserire lo script tramite l'istruzione di inclusione javascript nell'head ora però ho bisogno di passare una variabile c# che è presente nel controller dentro javascript che quindi poi debba eseguire il suo contenuto che appunto contiene codice javascript e mostrare il disegno......... come è possibile?
    • Modificato mvc33 domenica 4 settembre 2011 12:54
    venerdì 2 settembre 2011 10:47
  • Ciao mvc33,

    Per passare delle variabili C# al codice Javascript, prova come suggerito nel thread di seguito:

    How to pass a C# session variable to a Javascript Function

     

    Saluti,

    Irina


    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.

    LinkedIn

    lunedì 5 settembre 2011 15:58
  • Ciao mvc33,

    Avresti bisogno ancora di qualche dritta, oppure sei riuscito a risolvere nel frattempo?

     

    Grazie in anticipo per il tuo feedback.


    Irina Turcu

    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.

    LinkedIn

    venerdì 9 settembre 2011 14:09