2013-02-20 80 views
0

我正在使用Kendo網格,並且有一個ViewModel的集合正在Read方法中加載。這裏一切都很好,按預期工作。Kendo Grid無數據綁定在致電更新方法之前

但是,當單擊網格上的保存按鈕時,呈現給Update方法的對象不再完整且可用。

除了簡單的字符串[]屬性始終爲空,所有屬性都按預期設置。

網格指定,如:

@(Html.Kendo().Grid<Occam.Portal.ViewModels.UserViewModel>() 
    .Name("SystemUserGrid") 
    .Columns(columns => 
     { 
      columns.Bound(user => user.UserName); 
      columns.Bound(user => user.Email); 
      columns.Bound(user => user.Roles): 
     } 
.Ajax() 
.Batch(true) 
.ServerOperation(false) 
.Events(events => events.Error("error_handler")) 
.Model(model => 
    { 
     model.Id(m => m.UserId); 
     model.Field(p => p.UserName).Editable(false); 
     model.Field(p => p.Roles).Editable(false); 
    }) 

.Read("SystemUsers_Read", "Administration") 
.Update("SystemUsers_Update", "Administration") 
)) 
... 

爲什麼會劍道庫離開串[]屬性的角色爲空,儘管該數據被正確綁定到網格?

我在Kendo演示或論壇上找不到與此相關的任何內容。

回答

2

我認爲,因爲它不會傳回給您發送的完全相同的模型,它會創建一個新的UserViewModel List並嘗試將值應用於它,並且不知道如何爲string [],因爲它不是基礎類型;有很多不支持的類型。如果你改變你的模型以包含RolesStr,它是一個字符串,並在模型中有方法來從字符串[]轉換爲字符串(使用拆分等),那麼我認爲你會得到你想要的。在您的控制器獲取UserViewModel後,調用重新填充角色的方法。

我會做你的模型靜態方法,可以接受整個名單,並做他們一下子也許像

public static IList<UserViewModel> SplitEm(IList<UserViewModel> userViewModels) 
{ 
    [Split each RolesStr into Roles] 
} 
public static IList<UserViewModel> JoinEm(IList<UserViewModel> userViewModels) 
{ 
    [Join all the Roles into each RoleStr] 
} 

顯然看的LINQ使這兩個的實現微不足道。

+0

是的,我不喜歡劍道誠實。我已經在做你上面提出的建議,並不好。我最終完全壓平了Dto課堂,並以這種方式處理。謝謝Trey – Jammer 2013-02-22 15:12:38

相關問題