0

我以前也问过类似的问题,但我并没有牢牢把握我遇到的问题是什么。我的问题是当页面更改时,我无法从驻留在主控上的 TextBox 获取数据。这是发生的事情:

  1. 带有文本框和按钮的 MasterPage。
  2. 将数据输入到文本框并单击按钮。
  3. 表单的操作设置为 search.aspx,webapp 在那里导航。
  4. 此函数获取 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) 上。如果我再次输入搜索字符串,代码将返回我在文本框中输入的任何内容。我尝试将上面的代码从Masterto修改,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
4

1 回答 1

2

对于要加载到控件内页面的值,您必须在回发中,这就是它在从搜索页面发布时起作用的原因。

要在输入来自其他区域时获取值,您需要使用 Request.Form("Element") 从发布的表单中获取值。如果这是你需要走的路,只要确保你知道搜索框的 id 就可以了。

于 2008-11-03T16:37:18.090 回答