2016-04-25 7 views
-1

Die ASP.NET-Funktion ClientScript.RegisterClientScriptBlock kann verwendet werden, um einen Teil des JavaScript-Codes zu registrieren, der bei der Wiedergabe zur Seite hinzugefügt wird. Die Idee hier ist, dass Sie mehrere Instanzen verschiedener Benutzersteuerelemente haben könnten, die versuchen, das gleiche Skript immer wieder zu registrieren, aber dies stellt sicher, dass es nur einmal enthalten ist. Das Problem ist, Sie haben keine Kontrolle über wo der Code auf der Seite hinzugefügt wird. Dies wird den Code innerhalb des BODY Tags Ihrer Seite einfügen, aber ich muss etwas (nicht auf JavaScript-Code beschränkt) in den HEAD Block einfügen.Alternative zu ClientScript.RegisterClientScriptBlock?

Ich bin sehr wohl bewusst verschiedene Methoden der Content Block über einen etwas an dem Kopfblock hinzufügen oder „Head.Controls.Add aber diese Optionen das Problem nicht von der gleichen Sache adressieren werden mehrere hinzugefügt Zeiten.

gibt es eine bestehende Möglichkeit, dies zu tun, oder muss ich eine Klasse schreiben, die etwas ähnliches wie ClientScript.RegisterClientScriptBlock tut außer der Kopfblock-Targeting?

+0

Warum Sie tun * müssen * etwas in den Kopf? – mason

+0

Es gibt viele Dinge, die nur in den Kopf gehen, wie Meta-Tags, Stylesheet-Links, etc. –

+0

Ihre Liste der Dinge enthielt auffällig keine Skripte. – mason

Antwort

0

ich ein Benutzersteuer warf zusammen. Es gibt nichts im Markup bei a ll, so können Sie einfach eine neue Web Forms User Control zu Ihrem Projekt hinzufügen und diese hinter dem Code setzen:

public partial class ScriptControl : System.Web.UI.UserControl 
{ 
    private Dictionary<string, string> _scripts = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 

    public void RegisterScript(string key, string script) 
    { 
     if(!_scripts.ContainsKey(key)) _scripts.Add(key, script); 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     writer.WriteFullBeginTag("script"); 
     foreach(var script in _scripts.Values) writer.Write(script); 
     writer.WriteEndTag("script"); 
    } 
} 

einfach die Richtlinie zu Ihrer Seite Markup hinzu:

<%@ Register TagPrefix="uc" TagName="ScriptControl" 
    Src="ScriptControl.ascx" %> 

(wobei " ScriptControl.ascx "ist, was auch immer Sie das Steuerelement benannt haben) und dann können Sie es hinzufügen, wo immer Sie brauchen, einschließlich in der Kopfzeile.

<head runat="server"> 
    <uc:ScriptControl id="HeaderScriptControl" runat="server"/> 
</head> 

Die Benutzung ist so ziemlich das gleiche:

HeaderScriptControl.RegisterScript("myScript", 
    @"alert(""hello, world!"")"); 
+0

Ja, danke, aber ich habe schon etwas mehr oder weniger so gemacht. Ich versuchte sicherzustellen, dass es keine native Lösung gab, die ich übersehen hatte. Auch das würde nicht funktionieren, weil es voraussetzt, dass Sie JavaScript ausführen. –