在展开/折叠时禁用TreeView节点上的回发

时间:2009-04-14 20:35:16

标签: c# asp.net ajax treeview

怎么样?

我尝试AutoPostback=false,但点击该节点仍然会回发该页面。有什么想法吗?

4 个答案:

答案 0 :(得分:5)

前进之路.....

每个节点的自动选择操作是SelectExpand,此枚举的“选择”部分被解释为“我选择了某些内容并需要回发”。只是“扩展”节点而不会导致回发:

TreeView1.Nodes(0).SelectAction = TreeNodeSelectAction.Expand

答案 1 :(得分:2)

EnableClientScript的默认设置为true,因此默认情况下,扩展和折叠节点应该在客户端进行。请注意该属性的注释(强调我的):

  

使用EnableClientScript属性指定TreeView控件是否在兼容的浏览器上呈现客户端脚本以处理展开和折叠事件。当此属性设置为true时,兼容的浏览器会执行代码以展开和折叠客户端上的节点。 必须事先知道树节点数据才能使客户端脚本正常工作。每次展开或折叠节点时,使用客户端脚本都会阻止回发到服务器。

要检查的事项:

  1. 您可以在没有回发的情况下获得树视图数据源的节点数据
  2. 您尚未将EnableClientScript设置为false
  3. 您没有使用覆盖此行为的控件适配器
  4. 你不会让服务器误以为你是downlevel browser(那个页面在.NET 1.1上运行我认为,所以可能与你的服务器有所不同 - 它对待我的IE版本超重的UserAgent字符串为“Downlevel”,因为检查在128个字符后切断,并且失败)
  5. 如果您无法获得所有可用数据,则应确保正确设置PopulateOnDemandPopulateNodesFromClientTreeNodePopulate


    对评论的回应

    是的,没有理由你不能做你正在尝试用树视图控件做的事情 - 事实上,它应该为你做大部分工作 - 除非你没有预先提供整棵树,在这种情况下,您需要提供将通过PopulateNodesFromClient和TreeNodePopulate填充节点的方法,假设浏览器被正确识别(这些以前的链接都包含有和没有回发的示例)。

    jQuery树视图插件可能会更灵活(我没有使用它们,所以我不知道 - 我已经使用了我们正在讨论的TreeView控件,但是获得了“免费”功能,因为我只是有一棵小树,并提供所有数据,但需要更多的工作来设置:

    1. 如果你还没有使用它,你需要引入jQuery框架
    2. 编写一个可以调用的Web服务,以获取初始数据以及后续节点。
    3. 可能会担心JavaScript支持有限或没有支持的浏览器会发生什么。
    4. 3对你来说可能是也可能不是 - 在我们所做的每件事情中,我们尝试使用JavaScript来增强功能,而不是提供功能 - 因为jQuery库是所有客户端,如果浏览器不支持JavaScript ,你的jQuery TreeView控件不会出现,你可能会失去一个关键的导航元素,而像ASP.NET TreeView控件这样的服务器控件会注意到JavaScript不受支持并通过回退来解决这个问题。基于服务器(即回发后)版本的控件。

      你还应该记住,jQuery不是微软的东西(尽管他们现在支持它),并且已经存在很长一段时间了,作为客户端产品,它独立工作服务器技术 - MS给我们在ASP.NET框架中提供了许多“服务器”控件,如果我们愿意,我们可以使用它们,这样做可以让我们的生活更轻松(通常在短期内)无论如何),但我们不必 - 最近发布的ASP.NET MVC框架是一个很好的例子,它是使用.NET堆栈在IIS上构建Web应用程序的另一种方式 - 但通常没有服务器控件。 / p>

答案 2 :(得分:0)

asp.net treeview不支持此功能,

尝试obout treeview

它确实加载节点而不重新加载整个树。

答案 3 :(得分:0)

在css文件中添加以下代码。然后选择TreeView属性调用NodeStyle->的CssClass =禁用

a.disabled { pointer-events: none; cursor: default; }