Лучшие практики MVC для реализации поиска по сайту - PullRequest
0 голосов
/ 27 ноября 2009

У меня есть веб-сайт, на котором есть PageContent, News, Events и т. Д., И у меня есть контроллер, который будет выполнять поиск.

В этом методе действия контроллера я предполагаю, что я делаю 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;
        }

    }

Ответы [ 2 ]

0 голосов
/ 30 ноября 2009

Я собирался прокомментировать с аналогичной идеей Дарина. Создайте интерфейс, который вы реализуете на любом из доступных для поиска членов модели классов. на самом деле, я бы предложил использовать два различных интерфейса, один для параметров поиска, а другой для «списка» возвращаемых результатов. то есть в соответствии с:

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 голосов
/ 27 ноября 2009

Вы можете сделать так, чтобы все классы PageContent, News и Events реализовали общий интерфейс и затем возвращали список доступных для поиска элементов. В представлении вы можете перебирать элементы и форматировать их в соответствующем фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...