0

以下面的 web.sitemap 为例,我们想创建一个事件处理程序来捕获用户单击 ASP.Net TreeView 的“Teachers”链接时的情况。这恰好是一个父节点。

  <siteMapNode title="Teachers" url="~/DefaultTeachers.aspx" >
    <siteMapNode url="~/Teachers.aspx" title="Teachers" description="Maintain details of each Teacher." />
    <siteMapNode url="~/TeacherSchedules.aspx" title="Teacher Schedules" description="Maintain teacher schedules." />
    <siteMapNode url="~/TeacherEmailNotices.aspx" title="Email Notices To Teachers" description="Email notices to teachers." />
  </siteMapNode>

你能告诉我在 ASP.Net TreeView 的标记中放置什么事件可能是这样的吗?

<asp:TreeView 
    id="TreeViewMain"
    runat="server"
    ExpandDepth="0"
    OnUserClickedTheLink="TreeViewMain_UserClickedTheLink"
    DataSourceID="KnowledgeAcademySiteMap">

    <RootNodeStyle ImageUrl="/Images/book.png" />
    <ParentNodeStyle ImageUrl="/Images/book.png" />
    <LeafNodeStyle ImageUrl="/Images/book.png" />
</asp:TreeView>

同样在代码隐藏文件中,我们希望将 e.Node 或类似的东西放在“If”语句中,以测试实际单击了哪个节点:

If e.Node.Text = "Teachers" Then

    ' We will close all other nodes and open up the 3 leaf nodes under "Teachers" here.
    '----------------------------------------------------------------------------------
End If
4

1 回答 1

1

问题是 TreeView 只能执行以下两个功能之一:

  1. 回帖
  2. 导航

由于您将树视图数据源设置为站点地图,因此它将执行导航功能并且不会触发任何回发事件。它只会说 - 哦,你点击了教师节点,我只是带你到教师页面,仅此而已。

您可以尝试很多事情:

  1. 处理教师页面的 Load 事件内部的处理。当此事件触发时,显然意味着正在加载教师页面,此时您可以编写代码来展开和折叠某些树视图项。
  2. 另一种选择是摆脱站点地图并使用映射到自定义 xml 文件的 XmlDataSource,这样您的树视图将具有发行为,并且您将能够检查 OnSelectedNodeChanged 事件中的每个单击节点:

示例 xml 文件:

<menu name="menu">
  <teachers name="teachers">
    <teacher name="teacher1" />
    <teacher name="teacher2" />
    <teacher name="teacher3" />
  </teachers>
</menu>

后面的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim ds As XmlDataSource = New XmlDataSource
        ds.DataFile = Server.MapPath("~/App_Data/menu.xml")
        TreeViewMain.DataSource = ds
        TreeViewMain.DataBind()
    End If
End Sub

Protected Sub SelectionChanged(sender As Object, e As EventArgs) Handles TreeViewMain.SelectedNodeChanged
    Dim selected As String = TreeViewMain.SelectedValue
    If selected.Equals("teachers") Then
        'Do any required processing and then manually redirect to the Teachers Page
    End If
End Sub

这种方法的问题当然是您需要检查每个单击的项目并手动将用户重定向到特定页面,如果您有许多树视图项目要评估,这是不可接受的

于 2013-02-10T12:43:48.353 回答