我有一个模特:
public class DataModel
{
public GridSortOptions SortOptions { get; set; }
public string Term { get; set; }
public int? Page { get; set; }
...
}
public class GridSortOptions
{
public string Column { get; set; }
public SortDirection Direction { get; set; }
}
http请求:?Column=LastName&Direction=Descending
该请求无效,我需要按照以下方式更新:?SortOptions.Column=LastName&SortOptions.Direction=Descending
是否可以让ASP.NET在不更改模型的情况下理解原始请求?
PS。我知道我可以创建一个自定义活页夹,但我觉得存在一种非常简单的方式...
提前致谢!
答案 0 :(得分:0)
我的结构略有不同,因为我遇到了同样的问题(在MVC1中,现在仍然拥有它 - mvc4)。我经常发现嵌套模型往往会引起头痛和不必要的复杂性,所以我尽量平整我的视图模型,只是为了简化事情,所以不必编写自定义模型绑定器,节省了大量时间和代码。
我的操作通常看起来像这样的方法
//...snip
public ActionResult List(int? page, GridSortOptions sortOptions, string keyword) {
var model = new UserGridViewModel();
IQueryable<User> users = new UserRepository(Session).List();
if (sortOptions.Column != null) {
users = users.OrderBy(sortOptions.Column, sortOptions.Direction);
}
if (keyword != null) {
users = users.Where(x => x.Name.Contains(keyword))
}
model.SortOptions = sortOptions;
//using MvcContrib.Pagination.PaginationHelper here
model.Results = users.AsPagination(page ?? 1, 20);
return View(model);
}
//.....
我的观点逻辑很简单:
@using MvcContrib.UI.Grid
@using MvcContrib.UI.Pager
@model UsersGridViewModel
@Html.Grid(Model.Results).Columns(cols => {
cols.For(col => col.Id).Sortable(true);
cols.For(col => col.Name).Sortable(true);
//...etc
}).Sort(Model.SortOptions)
我的网格视图模型通常是这样的:
public class UserGridViewModel
{
public IPagination<User> Results { get; set; }
public GridSortOptions SortOptions { get; set; }
}