Лучший способ зарегистрировать JS для модульности в пользовательском контроле - PullRequest
0 голосов
/ 24 сентября 2008

У меня есть элемент управления, организованный следующим образом

alt text

и я хочу, чтобы javascript был зарегистрирован на главных страницах вызова и т. Д., Чтобы в любой момент, когда эта управляющая папка была удалена и затем зарегистрирована, она узнала, как найти URL-адрес для js.

Вот что у меня есть (в пользовательском управлении)

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 сентября 2008

Вы можете использовать вспомогательный класс со статическим методом:

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, который будет делать то же самое.

0 голосов
/ 24 сентября 2008

Я не вижу изображение, которое вы разместили.

Вы также можете использовать 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)));
            }
        }
     }
...