Вызов Jquery из тринода ASP.net в IE - PullRequest
0 голосов
/ 27 января 2012

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

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

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

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 27 января 2012

Можно рассмотреть следующее решение: использовать 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) { ... });
...