2011-08-09 9 views
2

私はasp.net 4.0アプリケーションで作業しています。サイトの1つは、ユーザーがデータベース内のものを検索できるようにすることです。このようなルックスで行われているページ:asp.netのロケーションバーにクエリーストリングスタイルの情報を入力する正しい方法

<asp:Panel ID="pnlSearch" runat="server" DefaultButton="lnkSearch" cssclass="searchbar box"> 
    <span id="searchFor"><strong>Search for</strong></span> 
    <asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>     
    <asp:LinkButton ID="lnkSearch" runat="server" Text="Search" onclick="lnkSearch_Click"></asp:LinkButton>    
</asp:Panel> 

lnkSearch_Clickはその後asp:Repeaterに結果を結合し、データベース上でクエリを実行します。

これはすべて動作しますが、問題があります。ユーザーのURLは変更されていないため、ユーザーが後で照会を保存したり、友だちにリンクする方法はありません。

私は少し何か行うことによってこの問題を解決することができます:

<script> 
    function doSearch() { location.href='~/defaultpro.aspx?search='+escape($('txtSearch').value); 
</script> 
<a ID="lnkSearch" href="javascript:void(0);" Text="Search" onclick="doSearch();" /> 

をしかし、これはasp.netが提供するツールを使用しないように自分の道から出て行くように感じています。これを行うより良い方法はありますか?

+0

パネルのBTWのデフォルトボタンが、リンクボタンコントロール – Sly

+1

のためにFirefoxで動作しません。 webformsはかなり迷惑です。 – Oliver

答えて

5

それを行うための最善の方法を取得するように設定する方法とフォームを持つことです。

<form method="get"> 

しかし、ASP.NETは、すべてのコントロールをラップ一つの巨大な形なので、そのないオプションが必要ですあなたのために。

protected void SearchButton_Click(object sender, EventArgs e){ 
    Response.Redirect(Request.RawUrl + "?search=" + Server.UrlEncode(txtSearch.Text)); 
} 

そして、あなたが使用している場合はPageLoadイベント

1

内のすべてのデータをバインドする:あなたはこれを実装することができます

他の方法は、あなたの検索ボタンのクリックイベントのイベントハンドラを作成することです。 Net 4.0なぜあなたはURLルーティングを使用していませんか? 新しい機能の使い方を説明したarticleを書きました。

検索を実行するクリックイベントがあり、検索(ロジックコード)の最後に、URLルーティングを使用して検索をURLに保持できます。 使用できる別の方法はセッションです。私は彼らがクライアント上にあり、操作する傾向があるので、クッキーを提案しません。最後に使用できるオプションはコンテキストです。 あるページから次のページに直接移動する場合は、ページ履歴を使用できます。

関連する問題