我有一个Kendo网格Razor定义:
@(Html.Kendo().Grid<MyApp.Models.FolderName.Whatever>()
.Name("grid")
...
...
由于我正在尝试创建可重用的页面,我需要在控制器中定义网格模型并通过ViewBag传递它。
@(Html.Kendo().Grid<ViewBag.myModel>()
.Name("grid")
...
...
但上述尝试失败了:
它不需要通过ViewBag,但我需要以其他方式定义模型。
答案 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
MyModel
或ViewBag.myModel
您的观看代码如下所示:
@(Html.Kendo().Grid((IEnumerable<BaseModel>)ViewBag.myModel)
.Name("Grid")
...
只要该模型继承自BaseModel
我希望这会有所帮助。
答案 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)