在标准 ASP.NET 2.0 TreeView 中单击树节点时调用方法

发布于 2024-07-17 09:43:34 字数 792 浏览 1 评论 0原文

我有一个使用 XML 数据源动态填充的树视图。 TreeView 中的叶节点尝试打开页面内 iframe 中的 URL。

这一切都工作正常,但我希望隐藏 iframe,直到选择叶节点为止。

有谁知道单击节点时会触发什么事件? 我尝试了 SelectedNodeChanged 事件,但这似乎没有被触发!

或者还有其他方法可以做到这一点吗?

更新 - TreeView 代码如下所示

<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" DataSourceID="XmlDataSource2" AutoGenerateDataBindings="False">
  <DataBindings>
     <asp:TreeNodeBinding DataMember="Node"  NavigateUrlField="URL" ValueField="Name" TargetField="iframe" SelectAction="Select" />         
  </DataBindings>
</asp:TreeView>

在摆弄我的代码时,我注意到当我从代码中删除 NavigateUrlField="URL" 时,树会触发 SelectedNodeChange 事件,但如果放回 NavigateUrlField="URL" 则不会触发。

知道如何解决这个问题吗???

I have a treeview which i populate dynamically using an XML Datasource. The leaf nodes in the TreeView attempt to open a URL in an iframe within the page.

This all works fine, but i would like the iframe to be hidden until the point the leaf node is selected.

Does anyone know what event is triggered when the nodes are clicked?? I tried the SelectedNodeChanged event but this doesnt seem to get triggered!

Or is there any other way to do this??

UPDATE - The TreeView code is shown Below

<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" DataSourceID="XmlDataSource2" AutoGenerateDataBindings="False">
  <DataBindings>
     <asp:TreeNodeBinding DataMember="Node"  NavigateUrlField="URL" ValueField="Name" TargetField="iframe" SelectAction="Select" />         
  </DataBindings>
</asp:TreeView>

While fiddling with my code i noticed that when i remove the NavigateUrlField="URL" from my code the tree triggers the SelectedNodeChange event, But does not Trigger if NavigateUrlField="URL" is put back in.

Any idea as to how i can get around this???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长伴 2024-07-24 09:43:34

SelectedNodeChanged 是在您的场景中捕获的正确事件。 也许更多的细节可能有助于确定为什么没有引发此事件。

另外,您应该记住,除非节点的 SelectAction 设置为 SelectSelectExpand,否则 TreeView 可能根本不会引发该事件。 这可能是一个值得研究的点。

编辑:(OP更新原始问题后):


这种行为是很自然的。 当您设置 TreeNode 的 NavigateUrl 时,它会进入“导航模式”。 这意味着它呈现为超链接而不是可单击的节点。 因此,此类 TreeNode 的所有选择事件均被禁用,并且 TreeView 的 SelectedNode 属性将返回 null 引用。 这是因为 TreeNode 的目的仅仅是重定向到所提供的 URL。

现在,有几种解决方案可以解决这个问题

: 不要以声明方式设置 NavigateUrl 属性,而是处理 SelectedNodeChanged 事件并根据单击的节点有条件地设置 IFrame 的 src 属性(<代码>选定节点)。 还将 IFrame 的可见性设置为 True。

b. 将客户端脚本附加到 TreeView 的 onclick 事件,您可以在其中设置 IFrame 的可见性。 有关如何执行此操作的示例位于 Madhur Ahuja 的博客这里

希望这可以帮助! :-)

The SelectedNodeChanged is the correct event to trap in your scenario. Perhaps a little more detail might help to identify why this event is not raised.

Also, you should keep in mind that it is possible that the TreeView may not raise the event at all unless the SelectAction for the node is set to Select or SelectExpand. This might be a point to look into.

Edit: (after OP's update to original question):


This behaviour is quite natural. When you set the NavigateUrl of a TreeNode, it goes into "Navigation mode". This means that it renders as a hyperlink instead of a clickable node. Therefore, all selection events are disabled for such a TreeNode and the SelectedNode property of the TreeView will return a null reference. This is because the purpose of the TreeNode becomes solely the redirection to a supplied URL.

Now, there are a few solutions to solve this problem:

a. Instead of setting a NavigateUrl property declaratively, handle the SelectedNodeChanged event and set the IFrame's src attribute there conditionally depending on which node was clicked (the SelectedNode). Also set the IFrame's visibility to True.

b. Attach a client script to the onclick event of your TreeView within which you set the visibility of the IFrame. Examples on how to do this are on Madhur Ahuja's blog and here.

Hope this helps! :-)

夏末的微笑 2024-07-24 09:43:34

AfterSelect 事件在节点选择更改后触发。 树中的选择发生变化之前的 BeforeSelect。

The AfterSelect event fires after the node selection has changed. The BeforeSelect right before the selection in the tree changes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文