0

我有一个这样组织的控件

替代文字

并且我希望在调用母版页等上注册 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"));
}

有任何想法吗?

4

2 回答 2

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 ));
        }
    }
}

或者您可以在页面/webcontrol/usercontrol 的某个基类中使用类似的实例方法,它会做同样的事情。

于 2008-09-24T15:38:20.890 回答
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)));
            }
        }
     }
于 2008-09-24T15:49:20.070 回答