2008-09-24 2 views
0

у меня есть элемент управления, который организован как этотЛучший способ зарегистрировать JS модульности в пользовательский элемент управления

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

Любые идеи?

ответ

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

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))); 
      } 
     } 
    } 
Смежные вопросы