У меня есть несколько простых страниц управления списками, каждая из которых строго типизирована по следующей ViewModel.
public class ListManagementIndexViewModel
{
public Guid Id { get; set; }
public string Name { get; set; }
}
У меня есть представления для категории, приоритета, статуса и несколько других раскрывающихся списков, есть некоторая конфигурация AutoMapper, которая гарантирует, что свойство Name
привязано к любой модели домена, которая может быть для объекта. Идея состоит в том, что системные администраторы могут управлять содержимым этих списков (создавать новые, редактировать существующие и удалять). Это дает мне представление индекса для каждого из них:
Я хотел бы разместить все это на одной странице, а не иметь отдельные представления для каждого. Я думаю partials
вероятно способ сделать это, но я не уверен, является ли это рекомендуемым подходом или нет?
Также я не понимаю, как обращаться с контроллером (ами). Как обстоят дела; с PriorityController у меня есть следующий индекс ActionResult
public ActionResult Index(string searchString, string currentFilter, int? page)
{
if (Request.HttpMethod == "GET")
searchString = currentFilter;
ViewBag.CurrentFilter = searchString;
int pageNumber = page ?? 1;
var query = Session.QueryOver<Priority>();
if (!string.IsNullOrWhiteSpace(searchString))
query.WhereRestrictionOn(p => p.PriorityName)
.IsInsensitiveLike(String.Format("%{0}%", searchString));
var result = query.OrderBy(p => p.PriorityName).Asc.List();
var viewModel = AutoMapper.Mapper.Map<IEnumerable<Priority>,
IEnumerable<ListManagementIndexViewModel>>(result)
.ToPagedList(pageNumber, PageSize);
return View(viewModel);
}
Хотя я мог бы переместить это на страницу управления одним списком 'Master', мне также нужно было бы сделать то же самое для других типов списков, но тогда что нужно было бы моей ViewModel Похоже, в настоящее время есть 5 списков для управления, поэтому у меня есть 5 контроллеров, делающих одно и то же, только типы различаются. Если бы я поместил все это на 1 страницу с одним представлением 'Master', мне бы каким-то образом нужно было поместить все 5 коллекций PagedList в 1 ViewModel, а затем в одиночную страницу 'Master'. версии передать данные соответствующему коду бритвы ?Partials
Кроме того, как мне обрабатывать другие действия контроллера (редактировать, создавать и удалять)?
Обновление
Думая о моих ногах - если бы унифицированная/единая страница представления ViewModel была:
public class ListManagementIndexViewModel
{
public Dictionary<string, IPagedList<T>> ManagementLists { get; set; }
}
и SinglePageController были
public ActionResult Index(string searchString, string currentFilter, int? page)
{
var priorities = GetPriorities(searchString, currentFilter, page);
var categories = GetCategories(searchString, currentFilter, page);
Dictionary<string, IPagedList> viewModel
= new Dictionary<string, IPagedList<T>>();
viewModel.Add("Priorities", priorities);
viewModel.Add("Categories", categories);
return View(viewModel);
}
Я мог бы перенести существующую логику в частный метод
private IPagedList<Priority> GetPriorities(string searchString,
string currentFilter, int? page)
{
if (Request.HttpMethod == "GET")
searchString = currentFilter;
ViewBag.CurrentFilter = searchString;
int pageNumber = page ?? 1;
var query = Session.QueryOver<Priority>();
if (!string.IsNullOrWhiteSpace(searchString))
query.WhereRestrictionOn(p => p.PriorityName)
.IsInsensitiveLike(String.Format("%{0}%", searchString));
var result = query.OrderBy(p => p.PriorityName).Asc.List();
var priorities = AutoMapper.Mapper.Map<IEnumerable<Priority>,
IEnumerable<ListManagementIndexViewModel>>(result)
.ToPagedList(pageNumber, PageSize);
return priorities;
}
Затем в моем представлении модель будет содержать ManagementLists
коллекций, и я смогу foreach
результаты в html-таблицы, как я сейчас делаю, но на отдельных страницах.
Однако просмотр результатов по страницам приведет к разбиению по страницам всех таблиц списков, а не только таблицы Priorities. Как мне сделать каждое обновление с помощью Ajax, чтобы подкачка в одной таблице обновляла только список в этой одной таблице? Если бы я снова включил поиск, который в настоящее время находится в методе ActionResult, но не реализован в пользовательском интерфейсе, мне также потребовалось бы обновить только таблицу Priorities. Например, если я ввел «Высокий» в поиске «Приоритет», я бы хотел только запросить таблицу «Приоритет» и обновить ее, а не выполнять 5 запросов к базе данных для поиска «Высокий» в категории или любом другом списке.