0

私はasp.net C# Webサイトに取り組んでおり、検索の実装を開始したばかりです。以下のコードで全文検索を使用する search.aspx ページがあります。

    protected List<string> keywords = new List<string>();

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        // Turn user input to a list of keywords.
        string[] keywords = tbKeyWords.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

        // The basic validation.
        if (keywords.Length <= 0)
        {
            lbAlert.Text = "Please input keyword.";
            return;
        }
        this.keywords = keywords.ToList();

        // Do search operation with DataAccess.cs page.
        DataAccess dataAccess = new DataAccess();
        List<Article> list = dataAccess.Search(this.keywords);

        ShowResult(list);
    }

このコードとページは機能します。ただし、MasterPage のサイトの上部にある検索テキスト ボックスでこのページを動作させる方法がわかりません。

ユーザーが検索ボックスに何かを入力して検索ボタンを押すと、上記のメソッドを同時に実行しながら search.aspx ページにリダイレクトするようにするにはどうすればよいですか? ある種のクエリ文字列を使用する必要があると思いますが、これまでのところ、私の努力は実を結んでいません。

4

2 に答える 2

1

クエリ文字列に引数を指定して、検索ボックスを検索ページにリダイレクトします。次に、何が起こったかに応じて、検索ページでクエリ文字列を使用するか、ボタン クリックを使用します。次のsearch.aspxようなコードを使用できます。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack && !String.IsNullOrEmpty(Request.QueryString["searchTerm"]))
    {
        string[] keywords = Request.QueryString["searchTerm"].ToString().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
        RunSearch(keywords);
    }
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    string[] keywords = tbKeyWords.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
    RunSearch(keywords);
}

private void RunSearch(string[] keywords)
{
    if (keywords.Length <= 0)
    {
        lbAlert.Text = "Please input keyword.";
        return;
    }
    this.keywords = keywords.ToList();

    // Do search operation with DataAccess.cs page.
    DataAccess dataAccess = new DataAccess();
    List<Article> list = dataAccess.Search(this.keywords);

    ShowResult(list);
}

マスターページの検索ボックスには、次のような JavaScript 関数を起動するクリック イベントを持つボタンを含めることができます。

function searchSite() {
    window.location = "/search.aspx?searchTerm=" + document.getElementById('searchInput').value;
}

任意の意見

これはサイトのメイン フォーム ( の付いたものrunat="server") にあると述べました。私の個人的な推奨事項は、次のように検索ボックスをそのフォームの外に移動することです。

<form action="javascript:searchSite()">
    <input type="text" id="searchInput"  />
</form>

なんで?それらがログイン ページにあり、検索ボックスに入力して [Enter] をクリックした場合 (一般的なユーザーの動作)、検索は実行されますか? または、デフォルトの「送信」ボタンが起動してログインしようとすると、エラーが発生する可能性がありますか? 私の意見では、これが混乱を避ける最も簡単な方法です。

于 2013-10-04T20:26:56.833 に答える
0

Session検索ボックス コントロール/マスター ページなどから保存しPage_Load、検索ページのセッションから読み込むことができます (その後、削除することをお勧めしますSession)。

于 2013-10-04T20:20:22.103 に答える