2011-11-17 14 views
8

Asp.net MVC'de yeniyim ve arama işlemini nasıl gerçekleştirebilirim konusunda hiçbir fikrim yok. İşte benim gereksinimim, lütfen bunu nasıl ele alacağınızı söyleyin: -Asp.net MVC'de arama yapma MVC

Kullanıcının bir arama sorgusu veya dizesi girebileceği bir metin kutusuna ihtiyacım var. Kullanıcı daha sonra bir düğmeye basar veya göndermek için enter tuşuna basar. Dizenin bir tablonun özellik adıyla eşleşmesi gerekir.

NOT NOT: - Verileri sorgulamak ve sonucu almak burada temel nokta değildir. Bilmem gereken tek şey, kullanıcı girişini nasıl alıp bir denetleyici eylemine ya da daha fazla işlemeye ne dersiniz? Sadece kullanıcı girişini nasıl okuyacağınızı ve nasıl arama yapacağınızı söyleyin.

cevap

8

Asp.Net MVC kullanır

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

o zaman bir denetleyici yazma: Şimdiye kadar bir arama girişini içeren bir form bahsettik standart HTTP fiilleri. Html kısmı için, bir URL'ye işaret eden normal bir html formudur. Sunucu tarafı, bu url girişi idare edecek ve gerekli olanı yapacak bir kontrolöre/eyleme yönlendirilecektir.

Bir örnek verelim. Bir arama formu yapmak istersiniz. Her şeyden önce, arama formlarının POST yerine HTTP GET yöntemini kullanması en iyi uygulamadır. Bu nedenle, arama sonuçları yer işaretli, bağlanmış, dizine eklenmiş vb. Olabilir. Daha fazla şey yapmak için Html.BeginForm yardımcı yöntemini kullanmayacağım. açık.

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

Gereksinim duyduğunuz tüm html budur. Artık bir kontrolör "MyController" çağrısında edeceğiz ve yöntem bu gibi bir şey olacaktır:

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

Şimdi "MyAction" denilen görünümü işlenecek ve bu bakış Modeli sizin "sonuç" olacak . Sonra istediğiniz gibi göstereceksiniz.

3

Bunu yapmanın en iyi yolu budur.

oluştur Görünüm Kontrolör

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

      // return a View with your Data. 
     } 
    } 

bir ViewModel

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

oluştur

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

bu yardımcı olur

7

Her zaman bir ASP.NET MVC uygulamasında, görünümünüzün yapısını ve gereksinimlerini ifade edecek bir görünüm modeli tanımlayarak başlarsınız.

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

ve nihayet bir görünümü:

@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

Her şeyden önce teşekkürler dostum. Gördüğünüz gibi, diğer cevapta @Matteo Mosca HTTP fiillerinin kullanılmasından bahsetmiştir. Birinin bunu kullanması gerektiğini düşünür müsünüz veya her zaman bu tür amaçlar için viewmodel kullanımını takip ediyor musunuz? –

+1

@Pankaj Upadhyay, modelleri ve HTTP fiillerini görüntüleme, ortak hiçbir şeyi olmayan tamamen farklı iki kavramdır.Her zaman bir ASP.NET MVC uygulamasında görünüm modellerini kullanmalısınız ve HTTP fiilleri söz konusu olduğunda, bir web uygulaması olduğundan ve HTTP fiillerini zaten kullandığınız HTTP protokolüne dayalı olduğundan. İsterseniz HTML formunda GET fiilini de kullanabilirsiniz. Html.BeginForm yardımcısının, bunu belirtmenize izin veren bir aşırı yükü vardır: '@using (Html.BeginForm (null, null, FormMethod.Get)) {...}'. Ardından, göndermekte olduğunuz işlemin '[HttpPost]' özniteliğini kaldırın. –

+0

ya ... GET fiilini kullanıyorum dediklerimi. Bu tür amaçlar için düşünmüyor musunuz, bu yerine viewmodel kullanmak daha iyi olurdu? Bu nedenle, sadece giriş sorgusunu almak için ayrı bir viewmodel oluşturmaya gerek yoktur. –