我有一个像这样组织的控件
我希望在调用母版页等上注册javascript,以便在删除然后注册该控制文件夹的任何地方,它将知道如何找到js的URL。
这是我到目前为止(在用户控件中)
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsClientScriptBlockRegistered("jqModal"))
Page.ClientScript.RegisterClientScriptInclude("jqModal", ResolveClientUrl("~js/jqModal.js"));
if (!Page.IsClientScriptBlockRegistered("jQuery"))
Page.ClientScript.RegisterClientScriptInclude("jQuery", ResolveClientUrl("~/js/jQuery.js"));
if (!Page.IsClientScriptBlockRegistered("tellAFriend"))
Page.ClientScript.RegisterClientScriptInclude("tellAFriend", ResolveClientUrl("js/tellAFriend.js"));
}
有什么想法吗?
答案 0 :(得分:1)
您可以使用带静态方法的辅助类:
public static class PageHelper {
public static void RegisterClientScriptIfNeeded( Page page, string key, string url ) {
if( false == page.IsClientScriptBlockRegistered( key )) {
page.ClientScript.RegisterClientScriptInclude( key , ResolveClientUrl( url ));
}
}
}
或者你可以在某个基类中为page / webcontrol / usercontrol设置一个类似的实例方法,它也会做同样的事情。
答案 1 :(得分:0)
我看不到您发布的图片。
你也可以使用Context.Items来确保每个请求只添加一次项目并通过控件本身呈现javascript,尽管我认为registerclient脚本也很棒。
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
string[] items = new string[] { "jqModal", "jQuery", "tellAFriend" };
//Check if the Script has already been rendered during this request.
foreach(string jsFile in items)
{
if (!Context.Items.Contain(sjsFile))
{
//Specify that the Script has been rendered during this request.
Context.Items.Add(jsFile,true);
//Write the script to the page via the control
writer.Write(string.Format(SCRIPTTAG, ResolveUrl(jsFile)));
}
}
}