带控制器和视图的ASPNET MVC3泛型

时间:2011-09-17 22:19:17

标签: asp.net-mvc asp.net-mvc-3

我一直在尝试为我正在开发的mvc网站提供可扩展的搜索模式,我想要一些基本功能,以通过添加另一个控制器选项来最小化我需要做的扩展搜索。

我在确定从基础抽象可搜索控制器假定特定实体和模型类型的位置时遇到问题。 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);
    }
}

2 个答案:

答案 0 :(得分:1)

我想我真的不明白你的问题。

您的模型将是@model SearchModel<WhateverYourTModelIs>。你指的是什么“免费管道”?

也许我很困惑,但你必须为派生控制器定义静态类型,那么为它们定义静态类型视图有什么问题呢?

答案 1 :(得分:0)

是的,我认为那是我最终的路线。然后我只使用一个主视图来处理搜索模型的公共视图部分,如搜索模式重新绑定到搜索输入,分页,当前页码等...