top
Loading...
ASP.NET2.0的multiview和wizard控件
在asp.net 1.1中,如果要做一個具有向導式的應用程序,是比較麻煩的。所謂向導式應用,就是說比如一個注冊用戶的應用,是需要若干步完成的,用戶填完某一步的表單后,可以點"下一步"而進入下一步,也可以使用"上一步"的功能回到剛才的頁面。而在asp.net 2.0中,引入了兩個新的控件:Multiview和Wizard向導控件,大大方便了用戶的使用。在本文中,將以vs.net 2005為例,說明如何使用這兩個控件來創建應用,分別舉出兩個例子:在線調查和注冊用戶,讀者可以通過本文加深對這兩個控件的認識,在這兩個例子中,我們還將使用到asp.net 2.0中的一個新的控件masterpage,具體的用法請參考其他文章的介紹。

首先,我們先用vb.net,建立一個新的網站工程,并且添加一個masterpage模版頁,設計如下圖:

點擊放大此圖片

可以看到,為了我們的應用演示用,在上面的模版頁中,在左部列出了兩個連接,分別是在線調查和注冊。好了,接下來我們來介紹如何使用multiview控件了。所謂multiview控件,其作用是可以將要顯示的頁面內容分為幾個部分進行顯示,而每個部分的頁面之間用比如"上一步","下一步"的導航功能來連接。我們先來看下multiview控件有哪些屬性:

1) ActiveViewIndex 該屬性默認值為1,為了顯示第一個步驟中的頁面,將其值設置為0。

2) Views:一個multiview控件包含多個views對象,每個views對象里是可以擺放控件的,但注意,在每個views對象里,所放置的控件的名稱ID必須唯一,否則會出錯。

要注意的是,multiview控件中,不提供任何自動的按鈕,要實現"下一步","上一步"的按鈕,必須自己添加。

下面開始設計這個在線調查的簡單應用,這里我們為了簡單起見,沒使用數據庫,在真實的情況下,會用數據庫來存儲用戶的選項。這個調查分為下面四個步驟:

1)第一個頁面,接受用戶輸入個人信息

2)第二個頁面,用戶選擇喜歡的編程語言

3)第三個頁面,用戶輸入最喜歡的組織

4)第4個頁面,顯示用戶在前三個頁面所輸入的信息。

首先,我們新增加一個空白頁面,并選擇剛才建立好的模版頁面為模版,再往頁面里拖拉一個multiview控件。在增加multiview控件后,再往其中拖拉4個view控件,最后往每個view控件里添加相關的控件,如下圖所示


注意我們在每個view控件中,都放置了next,previous等按鈕,以方便頁面的導航。此外,可以對每個按鈕的commandname屬性進行設置,如下表

CommandName
NextView 導航到下一個頁面.
PrevView 導航到前一個頁面
SwitchViewByID 當command name屬性設置為 SwitchViewByID時,必須設置Command Argument屬性,比如CommandArgument="View1"表示當點該按鈕時,跳轉到ID為View1的頁面中

在這個例子中,我們都設置每個按鈕的Command name屬性為NextView或者PreView,最后我們的代碼結構如下(具體代碼見附件):

<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
<asp:View ID="View1" runat="server">
...
</asp:View>
<asp:View ID="View2" runat="server">
...
</asp:View>
</asp:Multiview>

運行我們的應用,首先出現的是第一步,要求填入個人信息,如下圖:

點擊放大此圖片

點"Next"按鈕,則進入下一個頁面:

點擊放大此圖片

再點Next按鈕,則同樣進入第3個頁面,最后的第4個頁面如下,可以看到輸出了用戶之前各頁面輸入的信息:

點擊放大此圖片

為了在最后輸出用戶之前輸入的信息,在第3個頁面(view)的Finished按鈕中的事件中,寫入如下代碼:

Partial Class Survey
Protected Sub btnFinish_Click(ByVal sender As Object,
ByVal e As System.EventArgs) Handles btnFinish.Click
lblFirstName.Text = txtFirstName.Text
lblLastName.Text = txtLastName.Text
lblEmailId.Text = txtEmail.Text
If rdoVB.Checked Then
lblLanguage.Text = "VB"
ElseIf rdoCSharp.Checked Then
lblLanguage.Text = "C#"
ElseIf rdoJava.Checked Then
lblLanguage.Text = "Java"
End If
If rdoMicrosoft.Checked Then
lblOrganization.Text = "Microsoft"
ElseIf rdoSun.Checked Then
lblOrganization.Text = "Sun Microsystems"
ElseIf rdoIBM.Checked Then
lblOrganization.Text = "IBM"
End If
End Sub

Wizard向導控件

在asp.net 2.0中,wizard向導控件比multiview控件更方便。Wizard控件本身已經設置了比如上一步,下一步,完成等按鈕了,而且在設計視圖狀態下,可以根據自己需要查看每一步驟的頁面的內容,而不象multiview控件那樣,在設計視圖下,在一個頁面中,將全部所有的步驟涉及的頁面都顯示出來。下面看下wizard控件的重要屬性和事件:

ActiveStepIndex - 顯示當前是向導中的第幾個步驟,在頁面剛開始加載時,默認是0.

DisplaySideBar - 當該屬性設置為true時,則將整個流程的步驟全部顯示在頁面中。

DisplayCancelButton - 當該屬性設置為true時,在每個頁面中,都將顯示一個cancel的按鈕,要處理取消的事件,可以在 CancelButtonClick() 中編寫代碼

一些重要事件

ActiveStepChanged.---當從一個步驟轉換到另一個步驟時,觸發的事件

PreviousButtonClick.-當按"上一步"按鈕時觸發的事件

NextButtonClick. ---當按"下一步"按鈕時觸發的事件

FinishButtonClick.-----當"完成"按鈕時觸發的事件

CancelButtonClick. -----當"取消"按鈕時觸發的事件

下面,我們重新建立一個空白頁面,同樣使用之前的模版頁面作為模版頁。往頁面里拖放一個wizard控件,在控件的wizardsteps屬性中,點擊并彈出新窗口,如下圖所示

點擊放大此圖片

在這里通過"Add"增加步驟。在增加若干個步驟后,按確定按鈕。回到wizard控件,選擇并且點選wizard控件的右上角的智能感知標記,在彈出的窗口中的"Step"下拉列表中,可以選擇每一個步驟的頁面,分別為每一個步驟的頁面添加相關控件,這里,我們設計了四個步驟,其中的第一個步驟的頁面如下圖所示,其他步驟的頁面和代碼見附件的代碼:

點擊放大此圖片

最后,在最后一個頁面的Finish按鈕的事件中,寫入如下代碼,以顯示之前幾步用戶的輸入:

Protected Sub Wizard1_FinishButtonClick(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs)
Handles Wizard1.FinishButtonClick
lblFirstName.Text = txtFirstName.Text
lblLastName.Text = txtLastName.Text
lblEmailId.Text = txtEmail.Text
lblUserName.Text = txtUserName.Text
If rdoDaily.Checked Then
lblNewsletters.Text = "Daily Updates"
ElseIf rdoWeekly.Checked Then
lblNewsletters.Text = "Weekly Summary"
ElseIf rdoNoThanks.Checked Then
lblNewsletters.Text = "No Thanks"
End If
End Sub

運行程序,首先看到的是第一個注冊步驟,如下圖

點擊放大此圖片

接下來,按Next按鈕,進入第二個頁面,如下圖

點擊放大此圖片

最后,在倒數第二個頁面中,點選Finish按鈕,即可出現最后的顯示總結頁面,顯示出前幾步用戶輸入的內容

            點擊放大此圖片

小結

在本文中,簡單介紹了在asp.net 2.0中,如何使用multiview控件和wizard控件來進行簡單開發。可以看到,如果在編寫如用戶注冊等連續步驟的應用中,使用wizard控件往往會比使用multiview控件簡單方便。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗