MVC3 связывает параметр строки запроса со свойством глубокого объекта - PullRequest
1 голос
/ 01 апреля 2011

Мой домен настроен аналогично

public class Pagination 
{
    public int? Page { get; set; }
}

public class IndexViewModel
{
    public Pagination  Pagination  { get; set; }
}

public class HomeController : Controller
{ 
    public ActionResult Index(IndexViewModel model, Pagination pg, string page)
    {

        return View(model);
    }
}

Когда я перехожу к /?Page=5, я ожидаю, что значение 5 будет равным модели.привязать параметры запроса глубиной более 1 слоя.

Что я могу сделать, чтобы изменить это?

Или изменение этого параметра создает больше проблем, чем оно того стоит?И я должен просто сделать

public class HomeController : Controller
{ 
    public ActionResult Index(IndexViewModel model, Pagination pg, string page)
    {
       model.Pagination = pg;

        return View(model);
    }
}

* Обратите внимание, что тройные параметры приведены для иллюстрации того, что он не заполняет IndexViewModel, но заполняет оба других параметра, поскольку они имеют глубину 0 или 1 слой.*

1 Ответ

0 голосов
/ 01 апреля 2011

Если ваша подпись метода не должна быть ...

public ActionResult Index(int? page)
{
    var model = new IndexViewModel{
                        Pagination = new Pagination { Page = page ?? 1 } };
    if(page.HasValue)
        model.Stuff = StuffGenerator
                          .GetStuff()
                          .Skip(page.Value * _pageSize)
                          .Take(_pageSize);
    else
        model.Stuff = StuffGenerator.GetStuff().take(_pageSize);
    return View(model);
}

Ваш пример звучит как GET, но выглядит как POST.

...