【发布时间】:2014-08-19 13:07:50
【问题描述】:
我已经搜索了多个与此类似的问题,但未能提出解决方案。在我的 Masterpage 中,我有一个位于页面标题中的搜索文本框。单击搜索按钮时,我在 on_click 事件中设置了会话变量 = textbox2.text。然后我有一个单独的页面“Page.aspx”,它继承了该 MasterPage。当我在 Page.aspx 上尝试搜索某些内容时,问题就出现了,因为 onPostBack 没有看到文本框中的文本。我试图弄清楚如何在回发=真时设置会话(“搜索”)= Textbox2.text。这是我的 MasterPage 中的代码...
Protected Sub ImageButton2_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles ImageButton2.Click
ViewState("Search") = TextBox2.Text
Session("Search") = TextBox2.Text
Dim Conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Sprayer_Parts_CatalogConnectionString").ConnectionString.ToString)
Dim sql As New SqlDataSource
Dim sql3 As New SqlCommand
Dim sql4 As New SqlCommand
Dim str2 As String
Dim str As String
sql4.Connection = Conn
sql3.Connection = Conn
Conn.Open()
sql3.Parameters.AddWithValue("@Search", TextBox2.Text)
sql4.Parameters.AddWithValue("@Search", TextBox2.Text)
sql3.CommandText = "Select Category From SubCategory WHERE Category Like '%' + @Search + '%'"
sql4.CommandText = "Select Type From SubCategory WHERE Type LIKE '%' + @Search + '%' OR Category LIKE '%' + @Search + '%'"
str = sql4.ExecuteScalar().ToString
'Response.Redirect("~/Parts_Catalog.aspx?")
Conn.Close()
End Sub
这是我的“Page.aspx.vb”中的代码
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim url1 As String = Request.QueryString("Category")
Dim url As String = Request.QueryString("Item")
Dim Conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Sprayer_Parts_CatalogConnectionString").ConnectionString.ToString)
Dim sql As New SqlDataSource
Dim sql3 As New SqlCommand
sql3.Connection = Conn
Dim UrlStr As String
Dim Search As String = CType(Session.Item("Search"), String)
If Not Search = "" Then
FormView1.DataSourceID = "SqlDataSource4"
Dim LV As ListView = FormView1.FindControl("ListView1")
LV.DataSourceID = "SqlDataSource4"
LV.DataBind()
End If
If url1 = "Spray Guns" Then
Response.Redirect("~/Product.aspx?Product=" + url1)
End If
If IsPostBack Then
If Search = "" Then
Conn.Open()
sql.SelectParameters.Add("@Item", url)
sql3.Parameters.AddWithValue("@Item", url)
sql3.CommandText = "Select Type From SubCategory Where Category = @Item"
sql.SelectCommand = sql3.CommandText
UrlStr = sql3.ExecuteScalar.ToString
If UrlStr = "" Then
Response.Redirect("~/Product.aspx?Product=" + url)
End If
Conn.Close()
Response.Write("Param is :" + url1)
End If
End If
End Sub
【问题讨论】:
-
不清楚流是什么。 ImageButton2_Click 是否应该重定向到 Page.aspx,将 Category 和 Type 作为 queryString 值传递?
-
这基本上就是正在发生的事情。因为一旦我传递了会话值,我就会在我的一个 SqlDataSources 中查询该字符串值。不过现在,我只需要知道如何在 Page.aspx 上的 IsPostBack 为 true 时获取文本框的值。我已经测试过将它实际传递到查询中并且它可以工作,只是当我无法在 IsPostBack 上获取 Session("search") 的值时就不行了
-
所以,当我第一次加载 Page.aspx 页面时,该页面的页眉中有一个文本框。 Header 和文本框实际上是在 MasterPageFile 上编码的。因此,当在该文本框中键入文本并单击搜索按钮时,我试图在母版页文件中分配 Session("search") = Textbox2.text,因为我无法从 Page.aspx 访问文本框。然后我试图读取 Page.aspx 上的 Session("search") 以获取值。这有意义吗?
-
如果 page.aspx 正在显示并且用户输入搜索值并单击按钮,则不会设置“搜索”的会话值,因为页面的 Page_load 事件在按钮的 Click 事件之前触发。如果值发生更改并且再次单击按钮,则应显示先前的值,因为该值仍将在会话中。
-
会话不是在页面之间传递值的正确方式。这会导致错误,因为该值保留在 Session 中,直到显式删除。当用户在页面中来回移动时,您将因为残留数据而触发逻辑。
标签: asp.net vb.net null postback session-variables