OK,跨頁回發。開始了。
從您的搜索頁面開始,我們將其稱爲search.aspx - 這裏有您的下拉列表,文本框和按鈕。
Employee Name: <asp:TextBox runat="server" ID="SearchTextBox" />
<br />
<asp:DropDownList runat="server" ID="LocationDropDownList">
<asp:ListItem Text="Springfield" Value="Springfield" />
<asp:ListItem Text="Shelbyville" Value="Shelbyville" />
</asp:DropDownList>
<br />
<asp:DropDownList runat="server" ID="DepartmentDropDownList">
<asp:ListItem Text="Nuclear Power" Value="Power" />
<asp:ListItem Text="Dr. Frink's Lab" Value="Research" />
<asp:ListItem Text="Mr. Burn's Office" Value="Management" />
</asp:DropDownList>
<br />
<asp:Button runat="server" ID="SearchButton" Text="Search" PostBackUrl="~/SearchResults.aspx" />
注意按鈕有一項PostBackUrl屬性 - 這就是帖關閉的結果頁面的請求。我們還需要更改search.aspx.designer.vb,以便下拉列表和文本框屬於公共屬性,不受保護。
Public WithEvents SearchTextBox As Global.System.Web.UI.WebControls.TextBox
結果頁面將爲searchresults.aspx,其上有GridView。
<asp:gridview runat="server" id="SearchResultsGridView" />
現在,如何處理代碼中的跨頁面回發。在searchresults.aspx的Page_Load
事件中,我們檢查PreviousPage
屬性。 PreviousPage
可能是Nothing
(如果用戶直接在searchresults.aspx中鍵入),那麼如果是,我們將重定向到search.aspx。如果PreviousPage
是東西,那麼我們可以檢查IsCrossPagePostback
屬性。如果這是真的,那麼我們可能從我們的search.aspx頁面(這可能不是完全有效的假設,但它現在足夠好)來到這裏。如果是這種情況,那麼我們可以將PreviousPage轉換爲search.aspx的基礎類,並且由於我們使下拉列表和文本框控件公開,因此我們可以在此處將代碼作爲屬性訪問。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim employeeName As String
Dim department As String
Dim location As String
Dim searchPage As Search
If PreviousPage Is Nothing Then
Response.Redirect("search.aspx")
Else
If PreviousPage.IsCrossPagePostBack Then
searchPage = DirectCast(PreviousPage, Search)
employeeName = searchPage.SearchTextBox.Text
department = searchPage.DepartmentDropDownList.SelectedValue
location = searchPage.LocationDropDownList.SelectedValue
Call bindData(employeeName, department, location)
End If
End If
End Sub
Private Sub bindData(ByVal employeeName As String, ByVal locationName As String, ByVal departmentName As String)
With searchResultsGridView
.DataSource = 'Some code that passes the search parameters to the database
.DataBind()
End With
End Sub
至於您的要求,搜索結果只顯示單行,考慮是不是有可能有兩個員工具有相同的名稱,在同一個部門,在同一位置。這可能不太可能,但我認爲這是不可能的,我不確定你應該有一個限制,你不應該顯示它。如果這是一個工資系統,那麼最終可能會有一個你永遠無法通過用戶界面獲得的記錄,所以你永遠無法停止支付該特定的員工 - 可能不是你想要的想!
謝謝Pandiya。儘管這看起來像一個C#代碼。你有一個VB代碼嗎? – 2011-01-14 16:48:38
嘿大衛, 你只需要在你的按鈕點擊兩行 – 2011-01-14 16:48:38
只需指定您的數據源,然後在您的按鈕點擊調用數據綁定方法 – 2011-01-14 16:48:38