我的网站有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;
}
}
答案 0 :(得分:0)
您可以让所有PageContent
,News
和Events
类实现一个公共接口,然后返回一个可搜索项列表。在视图中,您可以迭代项目并将它们格式化为适当的部分。
答案 1 :(得分:0)
我打算用与达林相似的想法发表评论。创建一个可在任何可搜索的类模型成员上实现的接口。事实上,我建议使用两个不同的接口,一个用于搜索参数,另一个用于返回结果的“列表”。即沿着:
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; }
}
希望这至少会对这个主题产生一些想法......