2013-02-07 68 views
0

以下面的web.sitemap爲例,我們希望創建一個事件處理程序來捕捉用戶何時單擊「教師」鏈接ASP.Net TreeView。這恰好是一個父節點。當用戶點擊ASP.Net TreeView的節點時使用的事件處理程序

<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 e.Node.Text = "Teachers" Then 

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

回答

1

的問題是該樹視圖只能執行的兩個功能,這是一個:

  1. 郵回
  2. 導航

既然你是樹視圖的數據源設置爲一個網站地圖,它會執行導航功能,將大火後回事件。它會簡單地說 - 哦,你cl on在教師節點上,我只是想帶你到教師頁面,僅此而已。

有一些事情你可以嘗試:

  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 

當然是有這種方法的問題是,你需要檢查每一個點擊項目,並手動將用戶重定向到一個特定的頁面,如果你有很多樹視圖中的項目,以評估

+0

這將不被接受感謝回覆和有用的代碼示例。 :-) –