MVC3将查询字符串参数绑定到深层对象属性

时间:2011-04-01 16:58:01

标签: asp.net asp.net-mvc asp.net-mvc-3 modelbinders querystringparameter

我的域名设置类似于

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是model.Pagination.Page的值也是5,但是看起来MVC不会超过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 :(得分:0)

你的方法签名不应该......

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。