0

次のweb.sitemapを例として使用して、ユーザーがASP.NetTreeViewの[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.NetTreeViewのマークアップに配置するイベントを教えてください。

<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が実行できる機能は次の2つのうちの1つだけであるということです。

  1. ポストバック
  2. ナビゲート

ツリービューのデータソースをサイトマップに設定しているため、ナビゲート機能が実行され、ポストバックイベントは発生しません。簡単に言うと、Teachersノードが気に入ったので、Teachersページに移動します。それ以上は何もしません。

試すことができることがいくつかあります。

  1. 教師ページのLoadイベント内で処理を処理します。このイベントが発生した場合は、明らかに教師ページが読み込まれていることを意味します。その時点で、特定のツリービューアイテムを展開および折りたたむためのコードを記述できます。
  2. もう1つのオプションは、サイトマップを削除し、カスタム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 に答える