2010-09-14 148 views
2

我试图将搜索框添加到ASP.Net MVC Web应用程序的母版页中。令我困惑的是如何在母版页中正确实施它。所以用户在这个搜索框中键入数据,应该如何从MVC的角度处理数据?我知道我可以使用他掌握的页面代码,但我不应该。我目前正在尝试为此使用用户控件,但我不确定如何正确实现它,并且在线资源似乎有限。会创建一个HTML助手是最好的?将搜索框添加到主页面

总结:在MVC母版页中实现一个搜索框,该搜索框指向不同的网站并包含用户在搜索框中键入的查询。

是它更好地使用:

  • 母版页的代码隐藏
  • 用户控件
  • 或者创建一个单独的HTML辅助。

UPDATE:

好,每queen3的建议下,我实现了一个SearchController和使用的HTML辅助BeginForm生成一个搜索框。

控制器动作:

 Function SearchWiki(ByVal q As String) As ActionResult 
      Return Redirect("http://home/search/Results.aspx?k=" & q & "&s=IT%20FAQ") 
     End Function 

而且在母版页:

<% Using Html.BeginForm("SearchWiki", "Search", FormMethod.Post)%> 
           <input type="text" name="q" /> 
           <input type="submit" value="Search" /> 
          <% End Using%> 

但是当我尝试调试时,SearchWiki的功能不会被调用,并作为一个结果,没有任何反应,当我在搜索框中输入并点击搜索。

+0

当你说“什么都没有发生,当我在搜索框中键入并点击搜索”,你确定它什么都没有?没有HTTP请求? – Larsenal 2010-09-14 19:46:58

+0

安装FireBug - 这将是你的真正的IDE,而不是VS ;-)或者你可以使用Fiddler2。然后,您将能够检查是否发出请求,查看哪些URL,检查参数等。 – queen3 2010-09-14 21:44:22

回答

4

如果您要使用ASP.NET MVC,请忘记codebehind和用户控件。您需要HTML,CSS和JavaScript。

我想你要像

<form action="<%= Url.Action("Index", "Search") %>" method="post"> 
    <input type="text" name="q" /> 
</form> 

有了帮手它会像

<% Html.BeginForm("Index", "Search") %> 
    <input type="text" name="q" /> 
<% Html.EndForm() %> 

只是把这个变成母版页在适当情况下,你的网站设计。然后创建SearchController来处理请求,并返回View()和搜索结果。如果您接受类似谷歌的搜索请求/搜索?q =文本,您可以使用GET而不是POST。

控制器是非常简单的:

public class SearchController: Controller 
{ 
    public ActionResult Index(string q) 
    { 
    return View(SearchHelper.DoSearch(q)); 
    // or return Redirect("http://site?q=" + q) if you want redirect 
    } 
} 
2

总结:实现一个搜索框 在引导到 不同的网站的MVC母版页和包括他们键入的 用户的查询在 搜索框中。

好像你想使用不同的搜索提供商。在这种情况下,你根本不需要任何服务器端代码......只需要纯html。我给你举个例子与谷歌:

<form id="search" action="http://www.google.com.br/search" method="GET"> 
    <input type="text" name="q" /> 
    <input type="submit" value="Submit" /> 
</form> 

只要您MasterPage添加此代码,我们就大功告成了。

您还可以添加一些JQuery以将字符串"site:www.yoursite.com"附加到搜索查询中。这样做可以让Google搜索您网站上的关键字。 javascript代码应该是:

$("#search").submit(function(){ 
    var input = $(this).find('input[name=q]'); 
    var query = input.val() + ' site:www.yoursite.com'; 
    input.val(query); 
}); 
相关问题