2012-11-14 66 views
2

我想用Telerik MVC与动态ExpandoObjects的集合。Telerik MVC网格列表ExpandoObject

控制器是:

[GridAction] 
public ActionResult TestDiario() 
{ 
     var result = new List<dynamic>(); 

     dynamic diarioModel = new ExpandoObject(); 

     var dictionary = (IDictionary<string, object>)diarioModel; 

     dictionary.Add("ID", 1); 
     dictionary.Add("AlunoID", 12781); 
     dictionary.Add("DAY05CLASS1", true); 
     dictionary.Add("DAY05CLASS2", true); 
     dictionary.Add("DAY07CLASS1", true); 
     dictionary.Add("DAY08CLASS1", true); 

     result.Add(diarioModel); 
     return View(result); 
} 

的观点是:

@using Telerik.Web.Mvc.UI 

@model IEnumerable<dynamic> 

@{ 
    ViewBag.Title = "TestDiario"; 
} 

@(Html.Telerik().Grid(Model).Name("Grid") 
    .DataKeys(dataKeys => dataKeys.Add("ID")) 
    .Columns(columns => 
    { 
     columns.Bound("MatAnoID").Visible(true); 
     columns.Bound("AlunoID"); 
     columns.Bound("NroClasse"); 
     columns.Bound("Aluno"); 

     var dictionary = (IDictionary<string, object>)Model; 
     foreach (var property in (IDictionary<String, Object>)dictionary) 
     { 
      if (property.Key.ToString().Remove(3) == "DAY") 
      { 
       columns.Bound(property.Key); 
      } 
     } 
    }) 
    .Pageable() 
    .Sortable() 
    .Groupable() 
    .Filterable() 

) 

循环的foreach得到一天字符串启动的动态领域。

当我运行的项目出现下列错误:

{ “是不是可以转换一个类型的对象 'System.Collections.Generic.List 1[System.Object]' to type 'System.Collections.Generic.IDictionary 2 System.String,System.Object的]'。”}

有没有穿过田野使用动态物体与Telerik的MVC控制与循环的方法吗?

回答

2

是的,你可以,而你相当接近但犯了一些错误。

1)模型的类型的IDictionary不是因为它不是一个的expando对象。这是一个动态列表。

这是一个黑客位,但要解决这个问题我刚刚参加了枚举的第一个(或默认)元素,然后制成一本字典了这一点。

2)你试图绑定不存在在你的expando对象属性栏。

我评论了这些。

3)I 认为您正在寻找以“DAY”开头的键。如果你想从列名称中删除“DAY”,你可以调整我的示例代码。

除此之外,它工作得很好:

@(Html.Telerik().Grid(Model).Name("Grid") 
    .DataKeys(dataKeys => dataKeys.Add("ID")) 
    .Columns(columns => 
    { 
     //NOTE: some of these columns are not valid because you didn't include them as properties 
     //columns.Bound("MatAnoID").Visible(true); 
     //columns.Bound("NroClasse"); 
     //columns.Bound("Aluno"); 

     columns.Bound("AlunoID"); 

     var first = Model.FirstOrDefault(); 
     if (first != null) { 
      var dictionary = (IDictionary<string, object>)first; 
      foreach (var property in dictionary) { 
       string key = property.Key.ToString(); 
       if (key.StartsWith("day", StringComparison.InvariantCultureIgnoreCase)) { 
        columns.Bound(property.Key); 
       } 
      } 
     } 

    }) 
    .Pageable() 
    .Sortable() 
    .Groupable() 
    .Filterable() 
) 
+0

谢谢你,它的工作原理! – user1822331