2011-09-17 24 views
0

我一直在想出一個可擴展的搜索模式,我正在工作的mvc網站,我想要一些基本功能,以儘量減少我需要做什麼來擴展搜索增加另一個控制器選項ASPNET MVC3與控制器和視圖的泛型

我遇到了一個問題,確定我將從具有推定特定實體和模型類型的基本抽象可搜索控制器開始。 Mapper引用指的是AutoMapper,並且只將該實體映射到模型。一切似乎都可以正常工作,但我不確定視圖在模型定義方面會是什麼樣子,因爲基礎模型SearchModel的類型是可變的。我可以用@model SearchModel在每個控制器中實現我自己的視圖,但我只是想知道我可以擺脫多少「免費」管道。

public abstract class SearchableController<TModel, TEntity, TRepository> : Controller where TRepository : ISearchableRepository<TEntity> where TEntity : class where TModel : class 
{ 
    protected TRepository _repository; 

    [HttpGet] 
    public ActionResult Search(string q, int? page) 
    { 
     int pageNumber = page.HasValue ? page.Value : 1; 
     PagedList<TEntity> entities = _repository.Search(q, 10, page); 

     Mapper.CreateMap<TEntity, TModel>(); 
     var results = new List<TModel>(); 
     foreach (TEntity entity in entities) 
     { 
      var entityModel = Mapper.Map<TEntity, TModel>(entity); 
      results.Add(entityModel); 
     } 

     var model = new SearchModel<TModel>(); 
     model.searchPattern = q; 
     model.pageNumber = pageNumber; 
     model.Results = new StaticPagedList<TModel>(results, entities.PageNumber, entities.PageSize, entities.TotalItemCount); 

     return View(model); 
    } 
} 

回答

1

我想我真的不明白你的問題。

您的模型將是一個@model SearchModel<WhateverYourTModelIs>。你指的是什麼「免費管道」?

也許我很困惑,但你必須爲你的派生控制器定義靜態類型,那麼你爲他們定義靜態類型視圖有什麼問題?

+0

搜索結果視圖中發生的大部分事情只是分頁,搜索框和枚舉結果集,這將是具體的實現可能有一個局部視圖,以便它可以有一個特定的項目格式(即人與書可能看起來不同,包括任何你可能能夠在單個項目上執行)。實施的控制器可以使用一個主視圖,以促進這一點,以及我猜基於SearchModel 或我想的東西。 – Lawrence

+0

@勞倫斯 - 我不確定我是否理解你的觀點。你必須製作你的控制器的具體版本。即'公共類MyController:SearchableController '有什麼問題? –

0

是的,我認爲這是我結束的路線。然後,我只是使用主視圖來處理搜索模型的常見視圖部分,例如搜索模式重新綁定到搜索輸入,分頁,當前頁碼等等。