从IE中的ASP.net树节点调用Jquery

Calling Jquery from an ASP.net treenode in IE

本文关键字:树节点 调用 Jquery net ASP IE 中的      更新时间:2023-09-26

我在从asp.net树节点控件调用jquery函数时遇到问题。这是aspx文件中的树节点代码。我使用的方法是在"navigationUrl"属性中放置一个javascript链接。

以下是代码:

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

这在CHROME中非常有效。当我单击树节点"Level 1"时,report.aspx内容会按预期加载到mainContentContainerdiv中。

然而,在InternetExplorer(v8和9)中,它只是打开另一个浏览器窗口,并尝试加载JavaScript链接,就好像它是一个URL一样。由于某种原因,地址栏只显示链接的这一部分:"javascript:$('",内容窗口给出了"Internet Explorer无法显示网页"

我已经搜索了这个问题,我找到的所有解决方案都建议使用"OnClick"属性进行JavaScript调用,或者将"element"的"target"属性设置为"_self"

这两个选项对我都不起作用。我不能给标签一个"OnClick"属性,因为它不是这个asp.net控件的有效属性。

类型"System.Web.UI.WebControls.TreeNode"没有名为"onclick"的公共属性是出现在浏览器中的错误(作为标准.net错误网页返回)

我尝试了target="_self"选项,唯一的改变是打开一个错误的新浏览器窗口。当前浏览器将只显示[对象对象],地址栏中没有任何更改。

我读到的另一个解决方案是在javascript调用后加上"retunfalse",但这会导致"函数外的返回语句"javascript错误。

请告诉我是否有从asp.net树节点控件调用jquery.load的解决方案。

您可以考虑以下解决方案,即在加载文档后或在呈现树后使用jQuery来绑定点击事件处理程序。因此,您只使用报告的实际url,而不是NavigateUrl属性中的javascript:

<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) { ... });