2013-12-12 205 views
1

我有一個模型:ASP.NET MVC模型綁定 - 嵌套屬性

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

什麼是您視圖看起來像,並且你使用MVC contrib? –

回答

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; } 
} 
+0

謝謝,它現在是如何工作的。但是我的行爲有很多參數,比如術語,不同的過濾器,頁面和網格的一些狀態。將它包裝在一個對象中會更好。 –

+0

我在這裏簡化了我的例子,我的項目,我有一個網格模型的接口,以及一組具有通用方法的通用抽象基類,它們可以「自動」處理網格視圖的一些常用邏輯,但是,有點複雜。你能給我一個例子或你典型的行動嗎? –