Как разместить несколько наборов данных в ASP.NET MVC - PullRequest
0 голосов
/ 04 августа 2009

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

  • Объекты
  • Индекс страницы
  • Размер страницы

Моя первоначальная мысль была, например:

public class PagedModel<T> where T:class
{
    public IList<T> Objects { get; set; }
    public int ModelPageIndex { get; set; }
    public int ModelPageSize { get; set; }
}

Затем, имея модель, которая должна быть добавлена ​​к действию, например:

public class TypesViewModel
{
    public PagedModel<ObjectA> Types1 { get; set; }
    public PagedModel<ObjectB> Typed2 { get; set; }
    public PagedModel<ObjectC> Types3 { get; set; }
}

Так что если у меня, например, представление Index наследуется от типа:

System.Web.Mvc.ViewPage<uk.co.andrewrea.forum.Web.Models.TypesViewModel>

Теперь мой начальный метод aciton для индекса просто:

    public ActionResult Index()
    {
        var forDisplayPurposes = new TypesViewModel();
        return View(forDisplayPurposes);
    }

Если я затем захочу перейти на страницу, именно здесь я пытаюсь решить, какое действие предпринять. Допустим, я выбрал следующую страницу модели страниц Types2. Как должно выглядеть это действие для возврата нового представления, показывающего вторую страницу Types2 PageModel

Я думал, возможно, дублировать действие, но использовать его с POST

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(TypesViewModel model)
{
    return View(model);
}

Это хороший способ приблизиться к этому. Я понимаю, что всегда есть сессия, но мне было просто интересно, как такая вещь достигается в настоящее время там. Если какие-то лучшие методы были взаимно приняты и прочее.

Итак, одна страница с несколькими страничными моделями. Как сохранить данные для каждого, используя модель оболочки. Какой путь вы должны пройти в модели и каким образом вы должны пейджировать данные, то есть Форма сообщения

Наконец, я видел, что маршруты принимают это во внимание, т.е.

{controller}/{action}/{id}/{pageindex}/{pagesize}

но это касается только одной модели, и я не хочу повторять значения pageize и pageindex для числа моделей, которые у меня есть внутри модели оболочки.

Спасибо за ваше время !!

Andrew

1 Ответ

0 голосов
/ 06 августа 2009

ИМХО, если бы у вас была не просто коллекция объектов, но коллекция какого-то расширенного типа, например, что-то вроде:

public class PagedModelElement<T> where T:class
{
    public byte Step { get; set; }
    public string Name { get; set; }
    public T Value { get; set; }
}

public class PagedModel<T> where T : class
{
    public IList<PagedModelElement<T>> Objects { get; set; }
}

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

Так что вам не нужно беспокоиться о передаче этих двух параметров в URL, единственный параметр, который вам нужен, это PageNo:

{controller}/{action}/{pageNo}
Account/ShowUsers/3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...