2

У меня есть настраиваемый элемент управления, который полностью зависит от jquery-плагинов. Все работает нормально, как предполагается, но проблема возникает, когда элемент управления установлен Visible = false или любой из его родителей не является видимым. В идеале, когда элемент управления asp.net установлен Visible false, движок не отображает его, поэтому мой элемент управления не отображается на загрузке страницы. И когда элемент управления не отображает, он не загружает ресурсы javascript, и, следовательно, плагины jquery не связываются, когда элемент управления отображается на обратной стороне. Это очень простая проблема, и как разработчики, которые должны использовать ее, они просто собираются перетащить элемент управления на свои страницы, предполагая, что он работает отлично. Думаю, для этого должна быть работа. Ниже показано, как я загружаю ресурсы.Пользовательский контроль: скрипты не загружаются, когда управление скрыто на pageload

ClientScriptManager cs = this.Page.ClientScript; 

#region Loading JavaScript File(s) 
string MenuPlugin = "MainMenuControl.Scripts.javascript_main.js"; 
cs.RegisterClientScriptResource(typeof(MainMenuControl.MenuControl), MenuPlugin); 
string MenuInitializer = "MainMenuControl.Scripts.BuildMenu.js"; 
cs.RegisterClientScriptResource(typeof(MainMenuControl.MenuControl), MenuInitializer); 
#endregion 

#region Loading CSS File(s) 
string cssUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "MainMenuControl.Styles.MenuStyle.css"); 
HtmlLink cssLink = new HtmlLink(); 
cssLink.Href = cssUrl; 
cssLink.Attributes.Add("rel", "stylesheet"); 
cssLink.Attributes.Add("type", "text/css"); 
this.Page.Header.Controls.Add(cssLink); 
#endregion 

#region Loading Image(s) 
Page.ClientScript.GetWebResourceUrl(typeof(MainMenuControl.MenuControl), "MainMenuControl.Images.down.gif"); 
string script = string.Format(@"initializeMenu('{0}');", Page.ClientScript.GetWebResourceUrl(typeof(MainMenuControl.MenuControl), "MainMenuControl.Images.down.gif")); 
Page.ClientScript.RegisterStartupScript(Page.GetType(), "InitImage", script, true); 
#endregion 

В третьей последней строке кода я вызываю функцию с правильно загруженным URL-адресом изображения. Но по какой-то причине файлы javascript (ы) делают (и) nt load, и ни один браузер не показывает их в списке загруженных ресурсов.

Есть ли какое-либо решение проблемы или есть что-то, что я делаю неправильно? Я действительно беспомощно отношусь к этой проблеме сейчас и буду признателен за любую помощь.

ответ

1

У меня была очень похожая проблема раньше и наткнулся на ваш вопрос.

Я загрузил javascript для своего пользовательского элемента управления, переопределив метод OnPreRender.

protected override void OnPreRender(EventArgs e) { 
     base.OnPreRender(e); 
     Page.ClientScript.RegisterClientScriptInclude("MyJavascript", "MyURL"); 
    } 

Это работал при использовании управления в нормальной среде страницы, но в данном случае я использовал его внутри панели обновления и первоначально скрывая его. Ajax post backs с панели обновления затем обновит свойство Visible до значения true. На данный момент, конечно, у ASP.NET нет возможности автоматически вводить сценарий клиента в <head> на странице.

Раствор

Вместо наиважнейшая OnPreRender вы можете переопределить OnInit (который всегда должен стрелять даже тогда, когда контроль скрыт) в этой точке вы можете добавить обработчик событий к любому из Page событий. Это позволяет вам добавлять метод OnPreRender, который всегда будет выполняться как часть жизненного цикла Page.

protected override void OnInit(EventArgs e) { 
     base.OnInit(e); 

     Page.PreRender += new EventHandler(Page_PreRender); 
    } 

    protected void Page_PreRender(object sender, EventArgs e) { 
     Page.ClientScript.RegisterClientScriptInclude("MyJavascript", "MyURL"); 
    } 
+0

Большое спасибо за ваш ответ. Проблема все еще не решена, попробуем ее когда-нибудь сегодня. –

Смежные вопросы