Sto lavorando all'interno di un controllo utente Web (.ascx) che verrà incluso in un normale modulo Web (.aspx), ma devo essere in grado di inserire dinamicamente codice nella testa del documento dal controllo utente. Nei miei giorni di Coldfusion <cfhtmlhead> farebbe il trucco. C'è un equivalente di questo in ASP.NET o un hack simile?ASP.NET inserisce dinamicamente il codice nella testa
risposta
Per aggiungere markup HTML è possibile effettuare le seguenti operazioni:
Nel codice del UserControl è possibile accedere Page.Header, che è essa stessa un controllo. Per quel controllo è quindi possibile aggiungere nuovi controlli:
HtmlGenericControl newControl = new HtmlGenericControl("someTag");
newControl.Attributes["someAttr"] = "some value";
Page.Header.Controls.Add(newControl);
Per aggiungere script di markup non è necessario l'accesso al tag testa a tutti in quanto ASP.NET dispone di metodi helper sul ClientScriptManager che fare il lavoro per voi:
Ecco alcuni esempi di codice si può anche mettere nel codice di controllo utente:
// Register some inline script:
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myAlertScript", "alert('hello!')", true);
// Register a script reference:
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js");
this.Page.Header.Controls.Add
In questo modo, si aggiungono i controlli alla sezione della testa. È possibile aggiungere qualsiasi tipo di controllo. Se ritieni di aver bisogno di aggiungere un testo semplice (o di voler scrivere manualmente i tag), cerca nella classe LiteralControl.
c'è qualche guida all'uso di codice C# per modificare la pagina di intestazione here. Dovrebbe funzionare bene da qualsiasi codice lato server che viene eseguito prima del completamento del caricamento della pagina.
Un semplice ad es.
HtmlHead head = Page.Header;
HtmlTitle title = new HtmlTitle();
title.Text = "Test Page";
head.Controls.Add(title);
riferimento HTMLHead è nel namespace
System.Web.UI.HtmlControls
Override Load del controllo personalizzato() metodo per aggiungere i controlli o riferimenti che vi interessano nelle l'intestazione della pagina mentre la pagina aspx genitore viene caricata su server lato.
Ho una soluzione semplice per questo. Crea una cache di memoria di runtime basata sull'URL della pagina (come chiave) che contiene x informazioni su y (che si tratti di un riferimento di file, testo di script o classe che genera JavaScript) e serializza i suoi dati su JSON. Newtonsoft è utile per le istanze di qualsiasi classe. In effetti, puoi usare il suo output per inizializzare qualsiasi nuova istanza di una classe sulla base di un dato input. In un certo senso, ciò significa che è possibile che le istanze di una particolare classe vengano istanziate automaticamente nonostante il controllo dell'utente sull'istanza. Alla fine, si crea un semplice modulo Web da utilizzare come riferimento di script e come endpoint finale. Estrae il codice JavaScript (o quello che ha) e sputa il codice lato client di cui hai bisogno come riferimento di script all'interno del tag head.
Mi rendo conto che questa è una domanda vecchia, ma questo è un altro esempio.
Try This:
Page.Header.Controls.Add(
new LiteralControl(
"<script>alert('Literal Added to <Head>.');</script>"
)
);
Se si desidera aggiungere lo script in un particolare indice del <head>
è possibile utilizzare
AddAt(index, new LiteralControl(...))
dove l'indice 0 è uguale alla parte superiore del <head>
anche , è necessario aggiungere runat="server"
nel tag head ad es <head id="head1" runat="server">
- 1. Attacco iframe sito Web - inserisce il codice nella fonte
- 2. JMeter inserisce dinamicamente il nome o l'IP del server
- 3. ASP.NET - dinamicamente registrare un HttpHandler nel codice (non in web.config)
- 4. asp.net aggiunge dinamicamente GridViewRow
- 5. asp.net MVC checkbox mal di testa!
- 6. La pagina ASP.Net inserisce la chiave che provoca il postback
- 7. Come ottenere Page.ClientScript.RegisterClientScriptIncludere per includere nella testa?
- 8. Cambiare dinamicamente il contenuto nella finestra wpf
- 9. Come compilare ed eseguire il codice dinamicamente?
- 10. Git: TESTA vs testa
- 11. LINQ inserisce 'ESCAPE N' ~ 'nella query
- 12. Modifica ASP.NET MVC Percorsi dinamicamente
- 13. Come si inserisce un'applicazione ASP.Net MVC 4 nel controllo del codice sorgente?
- 14. ASP.NET ha creato dinamicamente controlli e postback
- 15. Aggiunge dinamicamente i comandi javascript Asp.net C#
- 16. ASP.NET MVC Aggiungi record figlio dinamicamente
- 17. Creare dinamicamente pagine di contenuto ASP.NET
- 18. Come modificare dinamicamente il tema di un'applicazione ASP.NET totale?
- 19. Rompere la testa per ottenere il routing Url nell'ambiente di hosting IIS 7: ASP.NET
- 20. Javascript, CSS dinamicamente generato in ASP.NET MVC
- 21. Evitare il codice spaghetti in ASP.NET MVC
- 22. asp.net HiddenField: aggiungi dinamicamente l'attributo personalizzato
- 23. Perché inserire JavaScript in testa
- 24. Git: Unire vecchio impegnarsi nella versione corrente di testa
- 25. Assegna il codice a un pulsante creato dinamicamente
- 26. Chiamare il codice Haskell collegato dinamicamente da Rust
- 27. Come aggiungere dinamicamente MenuItems (con un colpo di testa) per un menu WPF
- 28. Come si inserisce un'applicazione Java nella barra delle applicazioni?
- 29. Nibernate fluente che inserisce una clausola where nella mappatura
- 30. MySQL Inserisce record con valore NULL nella colonna NOT NULL
Le risposte di seguito sembrano affidarsi tutte all'intestazione con un attributo runat = "server", altrimenti Page.Header è nullo. – user420667