0%

動態新增或刪除MenuTab與MultiView

雖然我應該八萬年都不會用這兩個控制項,但今天幫人家改了一個莫名其妙的問題,就順便紀錄一下吧
必須寫在Page_Init,且MultiView在新增時不能放在Page_Load裡面,不然有時候會當掉….超怪!! ```vb
Protected Sub Page_Init(ByVal Sender As Object, ByVal e As EventArgs) Handles Me.Init

    If Not Page.IsPostBack Then
        Me.MultiViewControl.Controls.Clear()
        Select Case Request.QueryString("Type")
            Case "01"
                Me.MenuTab.Items.RemoveAt(0)
                Me.MenuTab.Items.RemoveAt(0)
                Me.MenuTab.Items.RemoveAt(0)
                Me.MenuTab.Items(0).Selected = True

                Me.MultiViewControl.Controls.Add(View4)
            Case "02"
                Me.MenuTab.Items.RemoveAt(0)
                Me.MenuTab.Items.RemoveAt(1)
                Me.MenuTab.Items.RemoveAt(1)
                Me.MenuTab.Items(0).Selected = True

                Me.MultiViewControl.Controls.Add(View2)
            Case Else
                Me.MenuTab.Items.RemoveAt(3)

                Me.MultiViewControl.Controls.Add(View1)
                Me.MultiViewControl.Controls.Add(View2)
                Me.MultiViewControl.Controls.Add(View3)
        End Select
    End If
End Sub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38


**補充!!!**

* 之前是用QueryString的參數來決定要加入哪些View,但因為其實開的WebForm都是同一個,所以如果有使用一些控制項(例如:UpdatePanel之類的),會回傳ViewState不一致或一些奇奇怪怪的問題一堆,所以改正了上述的作法,MultiView從頭到尾都不移除,而是依據目前Menu選取來決定show哪個View
* 修正版本 ```vb
Protected Sub Page_Init(ByVal Sender As Object, ByVal e As EventArgs) Handles Me.Init

If Not Page.IsPostBack Then
Select Case Request.QueryString("Type")
Case "01"
Me.MenuTab.Items.RemoveAt(0)
Me.MenuTab.Items.RemoveAt(0)
Me.MenuTab.Items.RemoveAt(0)
Me.MenuTab.Items(0).Selected = True
Case "02"
Me.MenuTab.Items.RemoveAt(0)
Me.MenuTab.Items.RemoveAt(1)
Me.MenuTab.Items.RemoveAt(1)
Me.MenuTab.Items(0).Selected = True

Case Else
Me.MenuTab.Items.RemoveAt(3)
End Select
End If
End Sub
Protected Sub View_Select(sender As Object, e As EventArgs) Handles Menu1.PreRender
Select Case Menu1.SelectedValue
Case "1"
MultiView1.ActiveViewIndex = 0
Case "2"
MultiView1.ActiveViewIndex = 1
Case "3"
MultiView1.ActiveViewIndex = 2
End Select
End Sub