Обобщение ASPNET MVC3 с контроллерами и представлениями - PullRequest
0 голосов
/ 18 сентября 2011

Я пытался придумать расширяемый шаблон поиска для сайта 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 ]

1 голос
/ 18 сентября 2011

Полагаю, я не совсем понимаю вашу проблему.

Ваша модель будет @model SearchModel<WhateverYourTModelIs>.О какой «бесплатной сантехнике» вы имеете в виду?

Возможно, я запутался, но вам нужно определить статические типы для ваших производных контроллеров, так в чем ваша проблема с определением статических представлений типов для них?

0 голосов
/ 20 сентября 2011

Да, я думаю, что это маршрут, которым я закончил.Затем я просто использую главный вид, который обрабатывает часть общего вида модели поиска, такую ​​как повторное связывание шаблона поиска с поисковым вводом, нумерацией страниц, номером текущей страницы и т. Д.

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