저는 작업중인 mvc 사이트에 대한 확장 가능한 검색 패턴을 찾기 위해 노력해 왔으며 검색 기능을 확장하기 위해해야 할 일을 최소화하기 위해 기본 기능을 원했습니다. 다른 컨트롤러 옵션을 추가합니다.컨트롤러 및 뷰가있는 ASPNET MVC3 Generics
특정 엔티티와 모델 유형을 추정하는 기본 추상 검색 가능 컨트롤러가 어디에서 나올지 결정하는 데 문제가 있습니다. 매퍼 참조는 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);
}
}
검색 결과보기에서 발생하는 대부분은 검색 상자 및 결과 집합을 열거하여 구체적인 구현이 특정 항목 형식을 가질 수 있도록 부분적으로 볼 수 있도록 할 수 있습니다 (예 : 사람 대 책이 다르게 보일 수 있습니다. 개별 항목에서 수행). 구현 된 컨트롤러는 SearchModel
@Lawrence - 귀하의 요지를 잘 모르겠습니다. 컨트롤러의 구체적인 버전을 만들어야합니다. 즉,'public class MyController : SearchableController'와 같이,'@model SearchModel '을 사용할 때의 문제점은 무엇입니까? –