0

我一直在研究一个 asp.net C# 网站,并且刚刚开始实施搜索。我有一个 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>

为什么?如果他们在您的登录页面上,并在您的搜索框中输入并单击“输入”(典型的用户行为),搜索会触发吗?还是默认的“提交”按钮会触发并尝试登录,可能会给他们一个错误?在我看来,这是避免混淆的最简单方法。

于 2013-10-04T20:26:56.833 回答
0

您可以Session从搜索框控件/母版页/任何内容中将其存储,然后从搜索页面的会话中加载它Page_Load(我建议Session之后将其删除)

于 2013-10-04T20:20:22.103 回答