0

このコードは以前は正常に機能していました。基本的に、検索用のテキスト ボックスが 1 つあるマスター ページがあり、名前を付けましたsearchBoxsearchBoxフォーム送信時にコンテンツを取得して variable に設定する方法がありますuserQuery。メソッドは次のとおりです。

Public Function searchString(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

結果は に表示されsearch.aspxます。ただし、searchBox以外のページで が入力されて送信された場合search.aspx、テキスト ボックスの内容は渡されません。フォームは非常にシンプルです。

<asp:TextBox ID="searchBox" runat="server"></asp:TextBox>
<asp:Button ID="searchbutton" runat="server" Text="search" UseSubmitBehavior="True" PostBackUrl="~/search.aspx" CssClass="searchBtn" />
.

4

2 に答える 2

1

テキストコントロールを介して値にアクセスし続けたい場合の解決策と、それが機能しない理由についてはカイルに同意しますが、httprequest からフォームデータを取り出すこともできます。私はこのように考えています(私のasp.netは少し錆びています)

Request.Form[txtBoxSrc.UniqueID]

これに加えて (previouspage プロパティを使用する) 他の手法については、http: //msdn.microsoft.com/en-us/library/6c3yckfw (VS.80).aspx に記載されています。あなたがする必要があるのは次のことだけです:

if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
       return SourceTextBox.Text;
    }
}

更新: UniqueID を使用する必要があることを指摘してくれた Jason Kealey に感謝します。

于 2008-10-30T23:23:57.523 に答える
1

PostBackUrl を使用しているため、「PreviousPage」識別子を使用して変数を参照する必要があると思います。

別の解決策は、PostBackUrl プロパティを使用せず、ユーザー コントロール内でイベントをキャプチャし (これを 1 つの場所にカプセル化していると想定しています)、次を使用します。

Response.Redirect("/search.aspx?sQuery=" & Server.URLEncode(searchBox.Text)) 

必ずしも機密データを渡すとは限らないため、これも許容できるはずです。

于 2008-10-30T21:02:25.767 に答える