C# Kendo ASP.NET MVC帮助程序网格泛型类
我面临以下困境: 我正在尝试在局部视图中创建剑道UI网格,该网格将与不同类型的对象一起使用,并且可以支持删除或创建等操作 该对象如下所示:C# Kendo ASP.NET MVC帮助程序网格泛型类,c#,asp.net-mvc-4,kendo-grid,kendo-asp.net-mvc,C#,Asp.net Mvc 4,Kendo Grid,Kendo Asp.net Mvc,我面临以下困境: 我正在尝试在局部视图中创建剑道UI网格,该网格将与不同类型的对象一起使用,并且可以支持删除或创建等操作 该对象如下所示: public class GridViewModel { public Type ObjectType { get; set; } public IEnumerable<object> Items { get; set; } public GridViewModel(Type type, IEnumerable<o
public class GridViewModel
{
public Type ObjectType { get; set; }
public IEnumerable<object> Items { get; set; }
public GridViewModel(Type type, IEnumerable<object> items)
{
Items = items;
ObjectType = type;
}
}
更新:
我找到了解决办法
@model GridViewModel
@using Kendo.Mvc.UI;
@{
System.Reflection.PropertyInfo[] propertyArray = Model.ObjectType.GetProperties();
List<object> mockList = new List<object>();
}
@(Html.Kendo().Grid(mockList)
.Name("Grid")
.Columns(columns =>
{
foreach (var property in propertyArray)
{
columns.Bound(property.Name);
}
columns.Command(c => c.Custom("Delete").Click("kendoGrid.onDeleteButtonClicked"));
columns.Command(c => c.Custom("Edit").Click("kendoGrid.onEditButtonClicked"));
})
.Groupable()
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action(Model.ReadDataActionName, ViewBag.PageLayout.ControllerName))
)
)
其中ReadDataActionName是负责返回Kendo网格可以读取的Json对象列表的操作名
然后,我制作了自定义命令,指向Jquery中的自定义函数,该函数将一个非常复杂的对象作为参数发送,该对象(除了所有其他内容外)包含我单击的网格中的Json对象
最后最重要的是数据源中的.Read函数。这必须指向一个返回特殊类型Json的函数(请参阅剑道文档,了解您的操作在演示示例中必须返回的Json类型)
因此,您不需要如您所见的对象数组:
@(Html.Kendo().Grid(mockList)
...
)
其中mocklist是一个对象列表(空且孤独-只是为了欺骗否则无法工作的函数)
最终的结果是,我有一个通用的网格,它可以接受任何带有删除和编辑按钮的对象数组,这些按钮指向可以根据自己的偏好自定义的函数-它可以打开一个弹出窗口,其中包含来自局部视图、全视图或任何您想要的数据。我甚至定制了一个删除功能,可以在不需要用户确认的情况下制作一篇删除Ajax文章,它完全可以工作。考虑将您的解决方案添加为答案,而不是将其粘贴到问题中。您好,我也面临同样的问题,这是一个很好的解决方案,我想你应该在这里对自己负责。不管怎样,我不知道这两个按钮是怎么工作的。无论何时单击它们,如何实现等效的“编辑/删除”事件?是否有方法使其与内联编辑一起工作?因为网格正在使用列表,所以将网格置于编辑模式会导致错误:
模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。
“第11行:@(Html.Kendo().grid(mockList)”
Html.Kendo().Grid<(Type)Model.ObjectType>
Html.Kendo().Grid<typeof(Model.ObjectType)>
Html.Kendo().Grid<IProduct>
@(Html.Kendo().Grid(Model.Items)
.Name("Grid")
.Columns(columns =>
{
foreach (var property in propertyArray)
{
columns.Bound(property.Name);
}
})
.Groupable()
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action(ViewBag.PageLayout.ReadDataActionName, ViewBag.PageLayout.ControllerName))
)
)
@model GridViewModel
@using Kendo.Mvc.UI;
@{
System.Reflection.PropertyInfo[] propertyArray = Model.ObjectType.GetProperties();
List<object> mockList = new List<object>();
}
@(Html.Kendo().Grid(mockList)
.Name("Grid")
.Columns(columns =>
{
foreach (var property in propertyArray)
{
columns.Bound(property.Name);
}
columns.Command(c => c.Custom("Delete").Click("kendoGrid.onDeleteButtonClicked"));
columns.Command(c => c.Custom("Edit").Click("kendoGrid.onEditButtonClicked"));
})
.Groupable()
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action(Model.ReadDataActionName, ViewBag.PageLayout.ControllerName))
)
)
public class GridViewModel
{
public Type ObjectType { get; set; }
public string ReadDataActionName { get; set; }
public GridViewModel(Type type, string actionName)
{
ObjectType = type;
ReadDataActionName = actionName;
}
}
@(Html.Kendo().Grid(mockList)
...
)