[英]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.