C# Kendo ASP.NET MVC帮助程序网格泛型类

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

我面临以下困境:

我正在尝试在局部视图中创建剑道UI网格,该网格将与不同类型的对象一起使用,并且可以支持删除或创建等操作

该对象如下所示:

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)
    ...
)