2010-09-14 197 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); 
}); 
相關問題