繁体   English   中英

从网络控制代码中包含Javascript服务器端?

[英]include Javascript server-side from webcontrol code?

在prerender事件下,如何从正在加载的Web控件中将Javascript包含在页面上?

这是我正在使用的函数,但很遗憾,它无法正常工作。

/// <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就是这样,如您所见,我将覆盖预渲染过程并在其中使用它。 只是不起作用:

[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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM