通过Viewbag发出通过Kendo UI网格模型的问题

时间:2015-04-09 13:55:34

标签: c# .net asp.net-mvc kendo-ui kendo-grid

我有一个Kendo网格Razor定义:

@(Html.Kendo().Grid<MyApp.Models.FolderName.Whatever>()
    .Name("grid")
    ...
    ...

由于我正在尝试创建可重用的页面,我需要在控制器中定义网格模型并通过ViewBag传递它。

@(Html.Kendo().Grid<ViewBag.myModel>()
    .Name("grid")
    ...
    ...

但上述尝试失败了:

enter image description here

它不需要通过ViewBag,但我需要以其他方式定义模型。

3 个答案:

答案 0 :(得分:1)

我将强类型模型传递给Razor视图以避免强制转换。

@model IEnumerable<MyModel>

然后就像

@(Html.Kendo().Grid<MyModel>()    
 .Name("grid")
 ... 

如果您想坚持ViewBag方法,那么您将必须转换数据

 @(Html.Kendo().Grid((IEnumerable<MyModel>)ViewBag.myModel)
.Name("Grid")
 ...

Telerik在记录这方面做得很好。你可以找到它here

请注意MyModel这里是一个强类型的。

修改

根据评论,看看这是否对您有所帮助。我的猜测是你有一些常见的属性可以放在基类中,如下所示

public class BaseModel
{
  public string PropertyOne{get;set;}
  public string PropertyTwo{get;set;} 
}

然后创建如下的子模型:

public class WhateverModel:BaseModel 
{

}
public class MyModel:BaseModel 
{

}

现在,您可以在WhateverModel

中收集MyModelViewBag.myModel

您的观看代码如下所示:

@(Html.Kendo().Grid((IEnumerable<BaseModel>)ViewBag.myModel)
.Name("Grid")
...

只要该模型继承自BaseModel

,您就可以将任何模型集合传递到ViewBag.myModel中

我希望这会有所帮助。

答案 1 :(得分:1)

我认为你的设计存在缺陷,你根本不应该使用viewbags。

我个人不喜欢直接将数据传递给视图,而Kendo Grid完全能够自行检索数据。这可以像你想要的那样通用。

如果你有不同的模型具有相同的结构,但填充方式不同,你应该将它们组合成一个可重复使用的通用模型。

@(Html.Kendo().Grid<MyApp.Models.GenericModel>()
    .Name("grid")
    .DataSource(ds => ds.Read("GetGenericData", "Home", new { someParameter })
    ...
)

答案 2 :(得分:0)

语法就像这样

    @(Html.Kendo().Grid((IEnumerable<MyApp.Models.FolderName.Whatever>)ViewBag.myModel)