从web控制代码中包含Javascript服务器端

include Javascript server-side from webcontrol code?

本文关键字:包含 Javascript 服务器端 代码 web 控制      更新时间:2023-09-26

如何从正在加载的webcontrol中包含Javascript到我的页面,在preender事件下?

这是我正在使用的一个函数,但不幸的是它不起作用。

/// <summary>
/// Includes a javascript on the page if it is not already included.
/// </summary>
/// <param name="url">The javascript to include on the page.</param>
public static void IncludeJavascript(string url)
{
    string key = MD5.GetMD5Hash(url);
    ClientScriptManager manager = (HttpContext.Current.Handler as Page).ClientScript;
    if (!manager.IsClientScriptIncludeRegistered(manager.GetType(), key))
    {
        manager.RegisterClientScriptInclude(manager.GetType(),key, url);
    }
}

我是这样使用它的:

ScriptHandler.IncludeJavascript("/scripts/TabControl.js");

正确吗?还是这条路错了?它需要是服务器端路径吗?

我创建的完整TabControl是这样的,正如你所看到的,我重写了prerender过程并在那里使用它。它就是不工作:

[ToolboxData("<{0}:TabControl Title='"My tabcontrol'" runat=server>'n<{0}:TabPage Title='"Default tab'" IsSelected='"True'">Insert tab page content here ...</{0}:TabPage>'n<{0}:TabPage Title='"Secondary tab'" IsSelected='"True'">Insert tab page content here ...</{0}:TabPage>'n</{0}:TabControl>")]
[ParseChildren(false)]
[PersistChildren(true)]
public class TabControl : WebControl
{
    private int count;
    public TabControl()
    {
        count = 0;
    }
    protected override void OnPreRender(EventArgs e)
    {
        ScriptHandler.IncludeJavascript(ResolveUrl("~/scripts/TabControl.js"));
        base.OnPreRender(e);
    }
    [Bindable(true)]
    [Category("Appearance")]
    [DefaultValue("")]
    [Localizable(true)]
    public virtual string Title
    {
        get;
        set;
    }
    protected override HtmlTextWriterTag TagKey
    {
        get
        {
            return HtmlTextWriterTag.Div;
        }
    }
    public override string ClientID
    {
        get
        {
            return "tabSectionWrapper";
        }
    }
    private TabPage selectedTab;
    public TabPage SelectedTab
    {
        get
        {
            return selectedTab;
        }
        set
        {
            selectedTab = value;
        }
    }
    protected override void RemovedControl(Control control)
    {
        if (control is TabPage)
        {
            count--;
            base.RemovedControl(control);
        }
    }
    protected override void AddedControl(Control control, int index)
    {
        if (control is TabPage)
        {
            if ((control as TabPage).IsSelected)
            {
                this.SelectedTab = control as TabPage;
            }
            (control as TabPage).ID = "" + count++;
            base.AddedControl(control, index);
        }
    }
    protected override void RenderChildren(HtmlTextWriter writer)
    {
        writer.Write("<div id='"tabContainer'"><ul class='"tabs'">");
        foreach (Control control in this.Controls)
        {
            if (control is TabPage)
            {
                (control as TabPage).RenderTitle(writer);
            }
        }
        writer.Write("</ul></div>");
        writer.Write("<div id='"boxWithContent'">");
        foreach (Control control in this.Controls)
        {
            if (control is TabPage)
            {
                (control as TabPage).RenderControl(writer);
            }
        }
        writer.Write("</div>");
    }
    public override void RenderControl(HtmlTextWriter writer)
    {
        writer.Write("<h1>");
        writer.WriteEncodedText(this.Title);
        writer.Write("</h1>");
        base.RenderControl(writer);
    }
    protected override void RenderContents(HtmlTextWriter output)
    {
        base.RenderContents(output);
    }
}

我发现该控件必须位于指定runat="server"的表单控件中。我认为任何带有runat="server"指定的控件就足够了,但是没有。

哇。哇。

尝试使用考虑到您的站点可能运行的虚拟目录的相对路径:

IncludeJavascript(ResolveUrl("~/scripts/TabControl.js"));