【问题标题】:How to pass a string array from Search textbox in asp.net WebSite to 'Search.aspx' page?如何将字符串数组从 asp.net 网站中的搜索文本框传递到“Search.aspx”页面?
【发布时间】:2013-10-11 23:03:53
【问题描述】:

我一直在研究一个 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 页面,同时运行上述方法?我想我应该使用某种查询字符串,但到目前为止我的努力没有结果。

【问题讨论】:

  • 搜索文本框的形式是否与带有runat="server" 的形式不同?
  • 不,那是它所在的表格

标签: c# asp.net


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用查询字符串中的参数将搜索框重定向到搜索页面。然后让您的搜索页面使用查询字符串或使用按钮单击,具体取决于发生的情况。您的 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>
    

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

    【讨论】:

    • 这取决于您提交表单的方式。它实际上是在javascript中重定向吗?或者它是否在执行一些你有重定向的代码?
    • 是的,但如果是 asp:Textbox,则 ID 可能不匹配。您可能需要发布您的代码。
    • 如果是服务器控件,则需要使用document.getElementById('&lt;%= searchInput.ClientID %&gt;')
    • JavaScript 函数中的大小写是否匹配?我最初的帖子都是小写的。此外,该表单必须在您的其他主表单之外。
    • 谢谢迈克!!!我故意把它放在结束 标记之前,愚蠢的我。 0.o 只是一个简单的问题,这会将文本框放在左下角,因为它不是我其他表单的一部分。我可以使用 CSS 将其定位在搜索框应该位于的顶部吗?
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2010-12-08
    相关资源
    最近更新 更多