2011-11-17 10 views
8

Sono nuovo ad Asp.net MVC e non ho idea di come posso eseguire la ricerca. Ecco il mio requisito, per favore dimmi come gestirai questo: -Esecuzione della ricerca in Asp.net MVC

Ho bisogno di avere una casella di testo dove l'utente può inserire una query di ricerca o una stringa. L'utente quindi fa clic su un pulsante o preme Invio per inviarlo. La stringa deve corrispondere al nome della proprietà di una tabella.

NOTA: - Interrogare i dati e recuperare il risultato non è il punto principale qui. Tutto quello che devo sapere è come prenderete l'input dell'utente e lo passerete all'azione di un controller o qualsiasi altra cosa per l'ulteriore elaborazione. Dimmi solo come leggeresti l'input dell'utente e dove lo manderai a cercare.

risposta

8

usi Asp.Net MVC verbi HTTP standard. Per la parte html, è un normale modulo html che punta a un url. Lato server, quell'URL verrà indirizzato a un controller/azione che gestirà l'input e farà ciò che è necessario.

Facciamo un esempio. Vuoi fare un modulo di ricerca. Innanzitutto, è consigliabile che i moduli di ricerca utilizzino il metodo HTTP GET anziché il POST, in modo che i risultati della ricerca possano essere aggiunti ai segnalibri, collegati, indicizzati, ecc. Non utilizzerò il metodo di supporto Html.BeginForm per rendere le cose più chiaro.

<form method="get" action="@Url.Action("MyAction", "MyController")"> 
<label for="search">Search</label> 
<input type="text" name="search" id="search" /> 
<button type="submit">Perform search</button> 
</form> 

Questo è tutto l'html che ti serve. Ora avrete un controller chiamato "MyController" e il metodo sarà qualcosa di simile:

[HttpGet] 
public ActionResult MyAction(string search) 
{ 
//do whatever you need with the parameter, 
//like using it as parameter in Linq to Entities or Linq to Sql, etc. 
//Suppose your search result will be put in variable "result". 
ViewData.Model = result; 
return View(); 
} 

Ora la vista chiamata "myAction" saranno resi, e il modello di questa tesi sarà la vostra "risultato" . Quindi lo mostrerai come desideri.

3

Questo è il modo migliore per farlo.

Creare un ViewModel

public class SearchViewModel 
{ 
    public string Query { get; set; } 
} 

Creare un controller

public class SearchController : Controller 
    { 
     [HttpPost] 
     public ActionResult Search(SearchViewModel model) 
     { 
      // perform search based on model.Query 

      // return a View with your Data. 
     } 
    } 

creare la vista

// in your view 
@using (Html.BeginForm("Search", "SearchController")) 
{ 
    @Html.TextBox("Query") 
    <input type="submit" value="search" /> 
} 

spero che questo aiuti

7

Come sempre in un'applicazione ASP.NET MVC, si inizia definendo un modello di visualizzazione che esprimerà la struttura e i requisiti della vista. Finora si è parlato di un form contenente un ingresso di ricerca:

public class SearchViewModel 
{ 
    [DisplayName("search query *")] 
    [Required] 
    public string Query { get; set; } 
} 

poi si scrive un controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new SearchViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(SearchViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      // There was a validation error => redisplay the view so 
      // that the user can fix it 
      return View(model); 
     } 

     // At this stage we know that the model is valid. The model.Query 
     // property will contain whatever value the user entered in the input 
     // So here you could search your datastore and return the results 

     // You haven't explained under what form you need the results so 
     // depending on that you could add other property to the view model 
     // which will store those results and populate it here 

     return View(model); 
    } 
} 

e, infine, una visione:

@model SearchViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(x => x.Query) 
    @Html.EditorFor(x => x.Query) 
    @Html.ValidationMessageFor(x => x.Query) 
    <button type="submit">Search</button> 
} 
+0

Prima di tutto grazie amico. Come puoi vedere, in altre risposte @Matteo Mosca ha menzionato l'uso dei verbi HTTP. Pensi che si dovrebbe usare quello o seguire sempre l'uso di viewmodel per tali scopi –

+1

@Pankaj Upadhyay, i modelli di vista e i verbi HTTP sono due concetti completamente diversi che non hanno nulla in comune.È necessario utilizzare sempre i modelli di visualizzazione in un'applicazione ASP.NET MVC e, per quanto riguarda i verbi HTTP, poiché si tratta di un'applicazione Web e si basa sul protocollo HTTP, si stanno già utilizzando i verbi HTTP. Potresti usare GET verb sul modulo HTML, se lo desideri. L'helper Html.BeginForm ha un sovraccarico che consente di specificare ciò: '@using (Html.BeginForm (null, null, FormMethod.Get)) {...}'. Quindi rimuovi l'attributo '[HttpPost]' dall'azione a cui stai inviando. –

+0

ya ... quello che stavo dicendo l'uso del verbo GET. Non pensate per tali scopi, sarebbe meglio usare questo piuttosto che il viewmodel? Perché in questo modo non è necessario creare un viewmodel separato solo per prendere la query di input. –

Problemi correlati