我以前也问过类似的问题,但我并没有牢牢把握我遇到的问题是什么。我的问题是当页面更改时,我无法从驻留在主控上的 TextBox 获取数据。这是发生的事情:
- 带有文本框和按钮的 MasterPage。
- 将数据输入到文本框并单击按钮。
- 表单的操作设置为 search.aspx,webapp 在那里导航。
- 此函数获取 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>
yield "searchbox"
)。
现在我已经从主页提交了搜索表单,我在搜索页面 (search.aspx) 上。如果我再次输入搜索字符串,代码将返回我在文本框中输入的任何内容。我尝试将上面的代码从Master
to修改,PreviousPage
但这根本不起作用,因为文本框控件位于母版页上。
希望我对背景信息的布局足够好,如果需要进一步澄清,请告诉我。
编辑:使用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