是否可以为同一个Kendo UI Grid提供不同的编辑器模板?

Mar*_*ius 5 c# asp.net-mvc-3 kendo-ui

我有一个MVC 3项目,我使用了很多Kendo UI Grid.

典型的View看起来像这样:

@using Kendo.Mvc.UI
@model List<ActionViewModel>
@(Html.Kendo().Grid<ActionViewModel>()
.Name("#grid")    
.Columns(columns =>
    {
        columns.Bound(p => p.Name);
        columns.Command(command => { command.Edit(); command.Destroy(); });
})
.ToolBar(toolbar => toolbar.Create().Text(Resources.Grid.Create))
.Editable(editable => editable.Mode(GridEditMode.PopUp)))
.Sortable()
.Scrollable()
.Filterable(f=>f.Extra(true))
.DataSource(dataSource => dataSource        
    .Ajax() 
    .Events(events => events.Error("error_handler"))
    .Model(model => model.Id(p => p.Id))
    .Create(update => update.Action("Create", "Action"))
    .Read(read => read.Action("Read", "Action"))
    .Update(update => update.Action("Update", "Action"))
    .Destroy(update => update.Action("Delete", "Action"))
))
Run Code Online (Sandbox Code Playgroud)

我经常需要为我的viewmodel定义自定义编辑器模板,这些模板用于Kendo UI的编辑弹出窗口.

在Kendo UI Grid中,可以创建,更新和删除元素.默认情况下,编辑和创建弹出窗口使用相同的编辑器模板.是否有一种简单的方法可以使用两个单独的编辑器模板进行编辑和删除?

Adr*_*ian 7

更新:

为了防止4年前答案的不必要的贬值,我在下面的评论中提到了@ataravati的问题.转到这里寻求更好,更现代的答案:Kendo UI网格 - 编辑和创建的不同模板

老答案:

这不是C#答案,但它是相关的.我使用JavaScript API并设法找出区分"添加"和"编辑"的方法,并让弹出编辑器对每个进行不同的反应.我的理由是,添加新条目时,所有字段都是可编辑的,但在编辑现有条目时,我需要将某些字段设置为只读.

简而言之,我为工具栏按钮添加了一个jQuery单击侦听器,并使用一组if语句来确定单击的按钮是否具有类k-grid-editk-grid-add(如果我在Grid小部件中使用自定义工具栏按钮,则自定义类) ).然后,我将操作类型("添加"或"编辑")存储在父网格的数据属性中:

$("#grid").data("action","add");

...然后我在自定义弹出编辑器模板中读取,以确定某些字段是否应该是只读的:

if ($("#grid").data("action") === "add") { /*Do stuff*/ }

我还使用此方法隐藏或显示工具栏按钮,具体取决于具体情况(例如,在内联编辑器模式下,只有在行处于编辑模式时才能看到保存和取消按钮,因此当用户选择行中的行时网格并单击"编辑"按钮,将显示隐藏的默认"保存"和"取消"按钮,其他按钮将被隐藏.完成"编辑"操作并且用户单击"保存"或"取消"后,按钮将切换回其初始状态状态).

有关更明确的信息,请参阅我的Kendo UI论坛主题:

http://www.kendoui.c​​om/forums/ui/grid/kendo-grid---how-to-have-different-custom-editor-for-update-and-create.aspx

我发布了一些示例代码,另一个名为Philipp的用户提出了一个不同的解决方案,它获得了相同的最终结果并发布了他的代码.

那么,回答你的问题:

不,没有简单的方法.该功能目前尚未包含在Kendo UI框架中.但是,仍然可以使用一些额外的肘部油脂.或咖啡因.:)

我希望这是有帮助的.

  • 如果再次检查论坛帖子,则会发布两个更简单(JavaScript再次,抱歉)的答案,利用有关网格小部件内部工作原理的知识.它涉及查找包含所选行的ID的变量,该变量通过事件链传递.如果它为空或空白,那么它是一个插入(添加),如果不是,则它是一个更新(编辑).http://www.kendoui.c​​om/forums/ui/grid/kendo-grid---how-to-have-different-custom-editor-for-update-and-create.aspx#2325121 (3认同)