之前我曾问过类似的问题,但我并没有牢牢掌握我遇到的问题。我的问题是当页面改变时,我无法从驻留在主服务器上的TextBox中获取数据。以下是发生的事情:
Public Function oSearchString(ByVal oTextBoxName As String) As String
If Master IsNot Nothing Then
Dim txtBoxSrc As New TextBox
txtBoxSrc = CType(Master.FindControl(oTextBoxName), TextBox)
If txtBoxSrc IsNot Nothing Then
Return txtBoxSrc.Text
End If
End If
Return Nothing
End Function
执行此代码时,即使文本框中输入了文本,也会返回""
。我尝试在框中输入一个默认值,然后通过就好了(即<asp:TextBox ID="searchbox" runat="server" text="searchbox"></asp:TextBox>
会产生"searchbox"
)。
现在我已经从主页提交了搜索表单,我在搜索页面(search.aspx)上。如果我再次输入搜索字符串,代码将返回我放入文本框的内容。我尝试将上面的代码从 Master
修改为 PreviousPage
,但由于文本框控件位于母版页上,因此根本无效。< / p>
希望我能够很好地列出背景信息,如果需要进一步澄清,请告诉我。
编辑:使用Request.Form("searchbox")
会产生Nothing
。我检查了Request.Form()
对象,发现我的文本框的ID实际上是ctl00$searchbox
。使用它作为ID或其索引(在这种情况下为3)给出了正确的结果。是否最好重写函数以检查Request.Form()
中包含searchbox
的键的所有键,或者有没有办法可以获得文本框的实际ID?对于前一种选择,这就是我提出的:
Public Function oSearchString(ByVal oTextBoxName As String) As String
For Each oKey As String In Request.Form.AllKeys
If oKey.Contains(oTextBoxName) Then
Return Request.Form(oKey)
End If
Next
Return ""
End Function
答案 0 :(得分:2)
对于要加载到控件内页面的值,您必须在回发内,因此从搜索页面发布时它的工作原理。
要在输入来自其他区域时获取值,您需要使用Request.Form(“Element”)从发布的表单中获取值。如果这是您需要的方式,请确保您知道搜索框的ID,您应该没问题。