現在、マスターページに検索文字列を入力および送信するためのテキストボックスとボタンがあります。検索は私のウェブサイトの内部です。ユーザーは検索文字列を入力し、検索ボタンをクリックします。検索ボタンは検索結果ページにリダイレクトされます。検索結果ページが読み込まれると、現在、前のページのコントロールを検索して検索文字列テキストボックスを検索し、検索文字列を取得します。
これは、例外のためにログインページから検索が入力された場合を除いて、すべて正常に機能します。現在のユーザーは前のページにアクセスできません。
したがって、検索文字列を取得するためのより良い方法は何でしょうか。リダイレクトURLが乱雑にならないようにしたいと思います。私はそれをSessionコレクションに保存することに不利ではありませんが、Pageloadイベントが発生する前にそこに到達する方法を理解するのに苦労しています。
以下は、適切なコードです。
マスターページから:
<asp:TextBox ID="SearchTextBox" runat="server" />
<asp:ImageButton ID="SearchButton" runat="server" Text="Search" PostBackUrl="~/Search.aspx" ImageUrl="~/Graphics/btn_search.png" ImageAlign="AbsMiddle" />
検索結果ページから:
private string getSearchTextBoxText(Control ctrl)
{
if (ctrl.HasControls())
{
foreach (Control child in ctrl.Controls)
{
string s = getSearchTextBoxText(child);
if (s != null)
return s;
}
}
else if (ctrl.ID == "SearchTextBox")
{
return ((TextBox)ctrl).Text;
}
return null;
}
protected void Page_Load(object sender, EventArgs e)
{
log.Debug("Entering " + MethodBase.GetCurrentMethod().Name);
string lastSearchText = Label1.Text;
string searchText = null;
try
{
searchText = PreviousPage != null ? getSearchTextBoxText(PreviousPage) : getSearchTextBoxText(this);
}
catch(Exception ex)
{
log.Error("Exception occurred attempting to retrieve the search string", ex);
}
...