2011-11-17 9 views
8

Jestem nowy w Asp.net MVC i nie mam pojęcia, w jaki sposób mogę przeprowadzić wyszukiwanie. Oto moje wymaganie, proszę powiedz mi, jak sobie z tym poradzisz: -Wykonywanie wyszukiwania w Asp.net MVC

Potrzebuję pola tekstowego, w którym użytkownik może wpisać zapytanie lub ciąg. Następnie użytkownik klika przycisk lub naciska klawisz enter, aby go przesłać. Łańcuch musi być dopasowany do nazwy właściwości tabeli.

UWAGA: - Zapytanie o dane i pobranie wyniku nie jest tutaj głównym punktem. Wszystko, co muszę wiedzieć, to jak podejmiesz dane od użytkownika i przekażesz je do akcji kontrolera lub cokolwiek innego do dalszego przetwarzania. Po prostu powiedz mi, jak przeczytasz dane wprowadzane przez użytkownika i gdzie wyślesz je do wyszukiwania.

Odpowiedz

8

zastosowań Asp.Net MVC standardowe czasowniki HTTP. W przypadku części html jest to zwykły formularz html wskazujący adres URL. Po stronie serwera ten adres URL zostanie przekierowany do kontrolera/działania, który obsłuży dane wejściowe i zrobi to, co jest potrzebne.

Miejmy próbkę. Chcesz utworzyć formularz wyszukiwania. Po pierwsze, najlepszą praktyką jest, aby formularze wyszukiwania używały metody HTTP GET zamiast POST, aby wyniki wyszukiwania mogły być zakładkami, linkami, indeksami itp. Nie będę używał metody helpera Html.BeginForm, aby uczynić więcej rzeczy jasny.

<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> 

To wszystko, czego potrzebujesz. Teraz będziesz mieć kontroler o nazwie „MyController” i metoda będzie coś takiego:

[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(); 
} 

teraz pogląd zwany „MyAction” zostanie wygenerowana, a model z tego względu będzie twój „wynik” . Następnie wyświetlisz go, jak chcesz.

3

Jest to najlepszy sposób na zrobienie tego.

Tworzenie ViewModel

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

utworzyć kontroler

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

      // return a View with your Data. 
     } 
    } 

utworzyć widok

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

nadzieję, że to pomaga

7

Jak zawsze w aplikacji ASP.NET MVC możesz zacząć od zdefiniowania modelu widoku, który wyrazi strukturę i wymagania twojego widoku. Jak dotąd mówiliśmy o postaci zawierającego wejście wyszukiwarki:

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

czym piszesz Kontroler:

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); 
    } 
} 

i wreszcie widok:

@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

Po pierwsze dziękuję kolego. Jak widać, w innej odpowiedzi @Matteo Mosca wspomniał o użyciu czasowników HTTP. Czy uważasz, że należy go używać lub zawsze stosować do tego celu viewmodel? –

+1

@Pankaj Upadhyay, modele widoków i czasowniki HTTP są dwoma zupełnie różnymi pojęciami, które nie mają ze sobą nic wspólnego.Zawsze powinieneś używać modeli widoku w aplikacji ASP.NET MVC, a jeśli chodzi o czasowniki HTTP, to, ponieważ jest to aplikacja internetowa i opiera się na protokole HTTP, używasz już czasowników HTTP. Możesz także użyć instrukcji GET na formularzu HTML, jeśli chcesz. Pomocnik Html.BeginForm ma przeciążenie, które pozwala ci to określić: '@using (Html.BeginForm (null, null, FormMethod.Get)) {...}'. Następnie usuń atrybut '[HttpPost]' z akcji, którą przesyłasz. –

+0

Ya ... Dats, co mówię, użycie GET czasownika. Czy nie sądzisz, że do takich celów, lepiej byłoby użyć tego zamiast viewmodel? Ponieważ w ten sposób nie trzeba tworzyć osobnego modelu widoku, aby pobrać zapytanie wejściowe. –