2011-11-17 84 views
8

Tôi mới dùng Asp.net MVC và không biết làm cách nào để tôi có thể thực hiện tìm kiếm. Đây là yêu cầu của tôi, hãy cho tôi biết cách bạn xử lý việc này: -Thực hiện tìm kiếm trong Asp.net MVC

Tôi cần phải có hộp văn bản nơi người dùng có thể nhập truy vấn tìm kiếm hoặc chuỗi. Sau đó, người dùng nhấp vào nút hoặc nhấn enter để gửi. Chuỗi cần phải khớp với tên thuộc tính của bảng.

LƯU Ý: - Truy vấn dữ liệu và tìm nạp kết quả không phải là điểm chính ở đây. Tất cả những gì tôi cần biết là bạn sẽ lấy đầu vào của người dùng như thế nào và chuyển nó đến một hành động điều khiển hoặc bất cứ điều gì để xử lý tiếp. Chỉ cần cho tôi biết làm thế nào bạn sẽ đọc đầu vào của người dùng và nơi bạn sẽ gửi nó để tìm kiếm.

Trả lời

8

sử dụng Asp.Net MVC động từ HTTP chuẩn. Đối với phần html, đó là dạng html bình thường trỏ đến url. Phía máy chủ, url đó sẽ được định tuyến đến một bộ điều khiển/hành động sẽ xử lý đầu vào và thực hiện những gì cần thiết.

Hãy lấy mẫu. Bạn muốn tạo một mẫu tìm kiếm. Trước hết, thực hành tốt nhất là sử dụng phương thức HTTP GET thay vì POST, vì vậy kết quả tìm kiếm có thể được đánh dấu, liên kết, lập chỉ mục, v.v. Tôi sẽ không sử dụng phương thức trợ giúp Html.BeginForm để làm mọi thứ thông thoáng.

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

Đó là tất cả html bạn cần. Bây giờ bạn sẽ có một bộ điều khiển được gọi là "MyController" và phương pháp sẽ là một cái gì đó như thế này:

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

Bây giờ quan điểm gọi là "MyAction" sẽ được trả lại, và Model của quan điểm cho rằng sẽ là "kết quả" của bạn . Sau đó, bạn sẽ hiển thị nó như bạn muốn.

3

Đây là cách tốt nhất để làm điều đó.

Tạo một ViewModel

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

Tạo một điều khiển

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

      // return a View with your Data. 
     } 
    } 

Tạo View

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

hy vọng điều này sẽ giúp

7

Như mọi khi trong ứng dụng ASP.NET MVC bạn bắt đầu bằng cách xác định mô hình xem sẽ thể hiện cấu trúc và yêu cầu của chế độ xem của bạn. Cho đến nay bạn đã nói về một hình thức có chứa một đầu vào tìm kiếm:

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

sau đó bạn viết một bộ điều khiển:

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

và cuối cùng là một cái nhìn:

@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

Trước hết là nhờ bạn đời. Như bạn thấy, trong câu trả lời khác @Matteo Mosca đã đề cập đến việc sử dụng các động từ HTTP. Bạn có nghĩ rằng người ta nên sử dụng hoặc luôn luôn theo dõi việc sử dụng viewmodel cho các mục đích như vậy –

+1

@Pankaj Upadhyay, mô hình xem và động từ HTTP là hai khái niệm hoàn toàn khác nhau không có điểm chung.Bạn nên luôn luôn sử dụng các mô hình khung nhìn trong một ứng dụng ASP.NET MVC và như xa như các động từ HTTP có liên quan, vì nó là một ứng dụng web và dựa trên giao thức HTTP bạn đã sử dụng các động từ HTTP. Bạn cũng có thể sử dụng GET động từ trên biểu mẫu HTML nếu muốn. Trình trợ giúp Html.BeginForm có quá tải cho phép bạn chỉ định điều này: '@using (Html.BeginForm (null, null, FormMethod.Get)) {...}'. Sau đó, loại bỏ thuộc tính '[HttpPost]' khỏi hành động mà bạn đang đệ trình. –

+0

ya ... dats những gì tôi đã nói việc sử dụng động từ GET. Bạn không nghĩ cho các mục đích như vậy, nó sẽ là tốt hơn để sử dụng này chứ không phải là viewmodel? Bởi vì theo cách này, người ta không cần phải tạo một viewmodel riêng biệt để chỉ lấy truy vấn đầu vào. –

Các vấn đề liên quan