C# 如何在ASP.NET MVC应用程序中实现搜索框?

C# 如何在ASP.NET MVC应用程序中实现搜索框?,c#,asp.net-mvc-3,search,C#,Asp.net Mvc 3,Search,我需要在我正在编写的C#MVC应用程序上实现一个“搜索”框 我以前从未实现过“搜索”框,我一直在寻找一些最佳实践,但我还没有完全找到我想要的 我非常喜欢stackoverflow上的搜索方式。 如果我输入一些随机单词,它就会导航到url 如果我输入title:random,它将导航到url 在客户端(当我按下回车键时)和服务器上都发生了什么事情来进行搜索 我故意忽略了我对正在发生的事情的任何想法,因为我不想对答案产生偏见(或显示我的无知) 编辑:我正在为这个问题添加一些细节 搜索词在何处以及如何

我需要在我正在编写的C#MVC应用程序上实现一个“搜索”框

我以前从未实现过“搜索”框,我一直在寻找一些最佳实践,但我还没有完全找到我想要的

我非常喜欢stackoverflow上的搜索方式。

如果我输入一些随机单词,它就会导航到url

如果我输入title:random,它将导航到url

在客户端(当我按下回车键时)和服务器上都发生了什么事情来进行搜索

我故意忽略了我对正在发生的事情的任何想法,因为我不想对答案产生偏见(或显示我的无知)

编辑:我正在为这个问题添加一些细节

  • 搜索词在何处以及如何转换为querystring参数?ie将几个随机单词转换为几个+随机+单词,标题:随机转换为标题%3Arandom

  • 在查询中,少数+随机+词在何处以及如何转换为变量

  • 查询是否只是一个大Where子句,对于位于+符号之间的每个项目,它都会不断附加“and”


  • 我想您可以解析字符串并进行一些替换以实现1和2,但看起来确实有一些东西可以自动转换(和还原)搜索字符串。我正试图为我的用户在搜索框中键入任何内容做好准备。

    这些帖子将帮助您了解它的工作原理


    这些URL使用所谓的查询字符串。它是一个“GET”请求,允许客户端脚本(javascript)以及后端代码检索用户的“查询”。在URL中,每当看到“?”时,它都是查询字符串的开头。这让某人变得像:

    可以通过&anothercommand=somethingelse添加多个参数

    因此,允许程序或脚本在谷歌上调用搜索,而无需在框中键入任何内容

    您可以使用C#“Request.QueryString[“parameter”]”访问查询字符串,在本例中,这些堆栈溢出URL的参数为“q”

    然后,查询数据库并返回结果。因为我不确定你在编码方面有多在行,所以我不确定你是想要网站,还是C#SQL方面。如果我错了,请道歉

    在客户机上: 我想象它在客户端发生的方式是,提交表单时文本框上的脚本重定向到您提到的url,并将这些查询参数添加到url字符串中。别忘了url编码。这是内置在javascript中的。i、 e.空间“”变为“%20”

    当表单提交时,服务器代码会检查表单“q”是否有任何查询字符串参数。如果有,并且不为空,它将查询数据库,通过几种方式之一返回,最有可能通过服务器控件返回

    1) 这就是URL编码。它是URL中不支持的字符列表。因此,它们需要改变。有一个标准集,例如空间为%20。在javascript中,您可以使用所需的查询字符串重定向到结果页面。在重定向之前,请使用该信息对其进行编码。i、 e.将“”更改为+或%20(实际上应该是%20,我发现+通常是internet explorer的方式)。 )

    2) 查询字符串的工作方式类似于密钥对值的哈希表。使用Request.QueryString,您可以选择键“q”并接收字符串“少量随机词”。这将被替换到SQL查询中。这是在C#端完成的,作为第一次检查,以查看参数q是否存在


    3) 您可以通过多种不同的方式进行查询。然而,搜索“和”等会得到许多不同的结果。您可以做的是解析出一个常用词列表,然后根据每个词的结果数量对结果进行排序。i、 e.在最简单的搜索中,这对于大型数据库是不明智的"..... 例如“%word%或“%word2%”等要获取每个单词,请执行string.split。

    尽管我不喜欢这样做,但我必须回答自己的问题。我无法理解的是搜索词是如何自动转换为querystring编码参数的(即所有空格都替换为+符号,而不是替换为%20)。我不明白这是如何实现的,我喜欢它,所以我想要同样的能力

    最后,我应该做的是从SO复制html并在我自己的MVC站点上试用,因为结果证明编码是内置/自动的。我不需要做任何事情来获得功能

    以下是搜索框的基本HTML:

    <form id="frmsearch" action="~/Catalog/Search" method="get">
         <input id="q" name="q" value="@q" style="width:275px;"/>
         <input id="submit" name="submit" type="submit" style="font-weight:bold;" value="Search" />
    </form>
    
    我唯一没有测试过它如何处理脚本攻击的东西,但我想我也会免费得到它。:)


    希望这能帮助那些偶然发现这个答案的人。感谢所有提交答案试图提供帮助的人。如果我的问题不够清楚,我很抱歉。

    我理解提问。我编辑了我的问题,为我的问题添加了一些细节。我编辑了它。还有一种C#方式来解码javascript编码的字符串。我一下子忘了它是什么,你得用谷歌搜索“url解码C”@Mitch我认为它不属于meta——它只是标题不好。它可以重新命名为“如何在ASP.NET MVC应用程序中实现搜索框?”请问什么是
    GetSearchResults
    方法?
    public ActionResult Search(string q)
    {
        //q = "few random words" (no need to remove '+' signs) 
        var model = GetSearchResults(q)
    
        return View(model);
    }