2012-01-27 52 views
0

我在从asp.net treenode控件调用jquery函数时遇到问题。 这是aspx文件中的treenode代码。 我使用的方法是在“navigateUrl”属性中放入一个JavaScript链接。从IE.net treenode在IE中调用jquery

下面是代码:

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

这完全适用于Chrome浏览器。当我点击treenode“Level 1”时,report.aspx内容会按预期加载到mainContentContainer div中。

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

我已搜索此问题和所有解决方案I发现建议使用“OnClick”属性进行JavaScript调用或将“元素”的“目标”属性设置为_self“

这些选项都不适用于我,我不能给标签” OnClick“属性,因为它不是此asp.net控件的有效属性。

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

我试过了target =“_ self”选项,唯一的变化是不是打开一个新的浏览器窗口出现错误。当前浏览器将只显示[对象对象],而不会在地址栏中进行任何更改。

我读到的另一个解决方案是在JavaScript调用之后放置“retun false”,但这会给出“函数外部的返回语句”javascript错误。

请让我知道是否有解决方案从asp.net treenode控件调用jquery.load。

回答

1

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

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

通常情况下,这会导致从页面导航到报表页面。但是,我们可以防止这种使用下面的jQuery代码到Click事件处理程序添加到链接:

$("#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) { ... });