ASP.Net MVC: отображение одних и тех же данных с использованием разных макетов - PullRequest
0 голосов
/ 18 мая 2010

Я хочу создать страницу, которая позволит пользователям выбирать, как они хотели бы просматривать свои данные - то есть сводку (которая поддерживает группирование), сетку (которая поддерживает группирование), таблицу (которая поддерживает группирование), карту, временная шкала, XML, JSON и т. д.

Теперь каждый макет, вероятно, будет по-разному использовать свою модель представления, которая наследуется от общей модели базового класса / представления. Причина в том, что для каждого макета требуется, чтобы структура объекта, с которой он имеет дело, была разной (некоторым нужна иерархическая структура, другим - более плоская структура).

Каждый макет будет вызывать один и тот же метод репозитория, и каждый макет будет поддерживать одинаковую функциональность, то есть поиск и фильтрацию (следовательно, эти элементы управления будут совместно использоваться макетами). Основным исключением является сортировка, которую должны поддерживать только таблицы и таблицы.

Теперь мне задают вопрос: что люди считают лучшим подходом?

  • Использование DisplayFor для обработки рендеринга разных типов?
  • Также, как мне это сделать с действиями ... Я мог бы предположить, что я бы использовал одно действие и передал типы макетов, но тогда как это поддерживает группировку, необходимую для сводки, сетки и табличных представлений ,
  • Относится ли я к каждой группе как к типу макета
  • Также, как это будет работать с точки зрения URL - что люди думают, что это шаблон для поддержки этой функциональности макета

Приветствие Энтони

Ответы [ 2 ]

0 голосов
/ 18 мая 2010

Концептуально View - это часть веб-приложения MVC, которое отвечает за обработку отображения данных.Поэтому, если вы хотите отображать данные по-разному, наиболее логичным представляется то, что каждый «дисплей» имеет свой собственный соответствующий вид aspx.

Все модели представлений могут наследоваться от одной базовой модели.Так, например, у нас может быть четыре модели и три представления:

public abstract class BaseViewModel {}
public class GridViewModel : BaseViewModel {}
public class TableViewModel : BaseViewModel {}
public class SummaryViewModel : BaseViewModel {}

GridViewPage<GridViewModel>
TableViewPage<TableViewModel>
SummaryViewPage<SummaryViewModel>

К каждому из представлений могут быть прикреплены разные таблицы стилей и файлы JavaScript, поэтому вы можете использовать DisplayFor, если хотите,или вы можете создать макет вручную.

Что касается контроллера, вы можете создать один метод действия, который возвращает любое из трех представлений, или вы можете создать три отдельных ActionResults, по одному для каждого представления.Вот «монолитный» ActionResult:

public ActionResult PageViewResult(string pageType)
{
    switch (pageType)
    {
        //define your cases, return your views and your models
        //make sure to set a default
    }
}

Вы можете форматировать маршруты так, как считаете нужным.Например, с помощью вышеупомянутого «монолитного» ActionResult мы могли бы создать следующий маршрут в нашем файле Global.asax:

    routes.MapRoute(
        "FormattedViewPage", // Route name
        "View/Page/{pageType}", // URL with parameters
        new { controller = "ViewPageController", action = "PageViewResult", pageType = "grid" } // Parameter defaults
    );

Надеюсь, это поможет.Дайте мне знать, если у вас есть какие-либо вопросы.

0 голосов
/ 18 мая 2010

Прежде всего, если это одни и те же данные, я бы попытался использовать одну и ту же модель для всех представлений, но либо использовать разные CSS или разные страницы / элементы управления aspx для рендеринга модели в зависимости от того, как пользователь хочет просматривать данные.

Также вы можете посмотреть, сколько всего этого можно сделать в JavaScript, все зависит от того, насколько вы хотите, чтобы пользовательский опыт был таким.

...