2009-11-27 86 views
0

我有一個網站,有PageContent,新聞,事件等,我有一個控制器,將處理搜索。實現網站搜索的最佳MVC實踐

在該控制器的行動方法,我想我做一個var results = SearchClass.Search(searchstring)保持邏輯的控制器。

但是因爲我正在返回不同的結果,因爲我正在搜索新聞,事件等,我如何返回結果,因爲它們是不同的模型。我是否使用ViewModel並將其傳遞給視圖? return View(SearchModel);

更新:我敲了這件事,你有什麼感想:

public ActionResult Search(string criteria) 
     { 
      var x = WebsiteSearch.Search(criteria); 
      return View(x); 
     } 

public static class WebsiteSearch 
    { 
     public static SearchViewModel Search(string SearchCriteria) 
     { 
      return new SearchViewModel(SearchCriteria); 

     } 
    } 

public class SearchViewModel 
    { 
     private string searchCriteria = String.Empty; 

     public IEnumerable<News> NewsItems 
     { 
      get { return from s in News.All() where s.Description.Contains(searchCriteria) || s.Summary.Contains(searchCriteria) select s; } 
     } 

     public IEnumerable<Event> EventItems 
     { 
      get { return from s in Event.All() where s.Description.Contains(searchCriteria) || s.Summary.Contains(searchCriteria) select s; } 
     } 

     public SearchViewModel(string SearchCriteria) 
     { 
      searchCriteria = SearchCriteria; 
     } 

    } 

回答

0

我打算用類似的想法評論Darin's。創建一個您在任何可搜索的類模型成員上實現的接口。實際上,我建議使用兩個不同的接口,一個用於搜索參數,另一個用於返回結果的「列表」。沿着線即:

public interface ISearchParameters 
{ 
    // quick and dirty - the 'key' 'COULD' be the db column 
    // and the 'value' the search value for that column 
    // as i said, quick and dirty for the purposes of demonstration 
    IDictionary<string, string> SearchTokens { get; set; } 
} 

// return a 'list' of matching entries which when clicked, 
// will navigate to the url of the matching 'page' 
public interface ISearchResults 
{ 
    string URLLink{ get; set; } 
    string Description{ get; set; } 
} 

希望這會造成對主題至少有一些想法...

0

你可以讓所有的PageContentNewsEvents類實現一個共同的接口,然後返回搜索項的列表。在視圖中,您可以遍歷這些項目並將它們格式化爲適當的部分。