2012-01-27 6 views
0

У меня возникли проблемы с вызовом функции jquery из элемента управления asp.net treenode. Вот код treenode в файле aspx. Метод, который я использую, заключается в том, чтобы поместить ссылку javascript в атрибут «navigateUrl».Вызов JQuery из ASP.NET treenode в IE

Ниже приведен код:

<asp:TreeNode Value="Level1" 
       NavigateUrl="javascript:$('#mainContentContainer').load('report.aspx?level=1');" 
       Text="Level 1" 
       Target="Content" 
       expanded="false"> 

Это отлично работает в хроме. Содержимое report.aspx загружается в div mainContentContainer, как и ожидалось, когда я нажимаю на treenode «Уровень 1».

В Internet Explorer, однако (v8 и 9), он просто открывает другое окно браузера и пытается загрузить ссылку JavaScript, как если бы это был URL. По какой-то причине в адресной строке отображается только эта часть ссылки: «javascript: $ (« »и окно содержимого дает эту ошибку« Internet Explorer не может отображать веб-страницу »

Я искал эту проблему и все решения I найденный предлагал либо использовать атрибут «OnClick», чтобы сделать вызов JavaScript, либо установить «целевой» атрибут «element to» _self »

Ни один из этих вариантов не работал для меня. Я не могу дать тегу" OnClick ", потому что он не является допустимым атрибутом для этого элемента управления asp.net.

Тип 'System.Web.UI.WebControls.TreeNode' не имеет открытого свойства с именем 'onclick' - ошибка, которая появляется в браузере (возвращается как стандартная веб-страница с ошибкой .net)

Я пробовал параметр target = "_ self", и единственным изменением было то, что вместо открытия нового окна браузера с ошибкой. Текущий браузер просто покажет [объект объекта] без каких-либо изменений в адресной строке.

Еще одно решение, которое я прочитал, - это поставить «retun false» после вызова javascript, но это дает ошибку «return statement вне функции» javascript.

Пожалуйста, дайте мне знать, если есть решение для вызова jquery.load из asp.net treenode control.

ответ

1

Вы можете рассмотреть следующее решение, которое должно использовать jQuery после загрузки документа или после визуализации дерева для привязки обработчика события клика. Поэтому вместо javascript: внутри атрибута NavigateUrl вы просто используете фактический URL-адрес отчета.

<asp:TreeNode Value="Level1" 
    NavigateUrl="report.aspx?level=1" 
    Text="Level 1" 
    Target="Content" 
    Expanded="false"> 

Как правило, это приведет к отходу от страницы и страницы отчета. Но мы можем предотвратить это, используя следующий JQuery код для добавления обработчика событий нажмите на ссылку:

$("#tree a").click(function(e) { 
    // Get the url (report.aspx?level=...) 
    var url = $(this).attr("href"); 

    // Load the report 
    $('#mainContentContainer').load(url); 

    // Don't navigate away 
    e.preventDefault(); 
}); 

Вы, возможно, придется использовать более конкретный селектор только добавить обработчик щелчка к узлам на определенном уровне в вашей дерево. В этом случае, вы можете дать эти узлы класса, используя LevelStyles, а затем использовать другой селектор в JQuery:

<div id="tree"> 
    <asp:TreeView runat="server"> 
    <LevelStyles> 
     <!-- Add class report only to nodes at the first level --> 
     <asp:TreeNodeStyle CssClass="report"/> 
    </LevelStyles> 
    ... 
    </asp:treeView> 
</div> 

Теперь ваш селектор JQuery будет:

$("#tree .report a").click(function(e) { ... });