2010-09-14 5 views
2

J'essaie d'ajouter un champ de recherche à une page maître dans une application Web ASP.Net MVC. Ce qui me déroute est de savoir comment l'implémenter correctement dans la page maître. Donc, l'utilisateur tape des données dans cette boîte de recherche, comment les données doivent-elles être traitées à partir d'une perspective MVC? Je sais que je pourrais utiliser le code de la page principale, mais je ne devrais pas. J'essaie actuellement d'utiliser un contrôle utilisateur pour cela, mais je ne suis pas sûr de savoir comment l'implémenter correctement et les ressources en ligne semblent être limitées. Est-ce que la création d'un assistant HTML serait la meilleure? Pour résumer: Implémentez un champ de recherche dans la page maître MVC qui dirige vers un autre site Web et inclut la requête de l'utilisateur qu'ils ont saisie dans la zone de recherche.Ajouter un champ de recherche à un gabarit

Est-il préférable d'utiliser:

  • Maître Page vi codebehind
  • Un contrôle utilisateur
  • Ou créer un Helper HTML distinct.

MISE À JOUR:

Ok, par les conseils de Reine3, je mis en œuvre un SearchController et utilisé le HTML Helper BeginForm pour générer une zone de recherche.

Action de contrôleur:

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

Et dans le Master Page:

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

Mais lorsque je tente de débogage, la fonction SearchWiki ne fait jamais appelé et, par conséquent, rien ne se passe quand je tapez dans la zone de recherche et appuyez sur Rechercher. Oubliez les commandes codebehind et utilisateur si vous voulez utiliser ASP.NET MVC.

+0

Lorsque vous dites "rien ne se passe lorsque je tape dans le champ de recherche et que je clique sur Rechercher", êtes-vous sûr que ce n'est vraiment rien? Aucune requête HTTP n'est faite? – Larsenal

+0

Installez FireBug - ce sera votre véritable IDE, pas VS ;-) Vous pouvez également utiliser Fiddler2. Ensuite, vous serez en mesure de vérifier si les demandes sont faites, à quelle URL, inspecter les paramètres, etc. – queen3

Répondre

4

Vous avez besoin de HTML, CSS et JavaScript.

Je suppose que vous voulez quelque chose comme

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

avec des aides, il sera quelque chose comme

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

Il suffit de mettre cela en page maître le cas échéant en vous la conception du site. Créez ensuite SearchController pour gérer la requête et renvoyer View() avec les résultats de la recherche. Vous pouvez utiliser GET au lieu de POST si vous acceptez les requêtes de recherche de type google/Search? Q = text.

Le contrôleur est très simple:

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

Pour résumer: Mettre en oeuvre une zone de recherche dans la page principale MVC qui dirige à un autre site Web et inclut la requête de l'utilisateur qu'ils tapés dans le champ de recherche .

Vous semblez vouloir utiliser un autre fournisseur de recherche. Dans ce cas, vous n'avez besoin d'aucun code côté serveur ... seulement du code html pur.Je vais vous donner un exemple avec Google:

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

il suffit d'ajouter ce code sur votre MasterPage et nous avons terminé.

Vous pouvez également ajouter un peu de JQuery pour ajouter la chaîne "site:www.yoursite.com" à la requête de recherche. Ce faisant, vous pouvez demander à google de rechercher les mots-clés sur votre site. Le code javascript doit être:

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