界面控件Telerik UI for ASP. NET Core教程 - 如何为网格添加上下文菜单?
Telerik UI for ASP. NET Core是用于跨平台响应式Web和云开发的最完整的UI工具集拥有超过60个由Kendo UI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。上下文菜单允许开发者为应用程序的最终用户提供额外的功能和选项本文将带领大家看看如何在 ASP. NET Core 网格中使用它。Telerik UI for ASP. NET Core Grid组件是一个非常受欢迎的功能它使您可以自定义用户体验并创建对所呈现的数据有意义的选项。上下文菜单是应用程序很好的功能选择无论是桌面还是web端都能直接从屏幕上显示的数据为用户添加额外的功能和选项从而为您的产品增加价值您熟悉Telerik UI for ASP. NET Core Grid吗Telerik UI for ASP. NET Core是一个健壮的UI组件库以其卓越的质量和性能而闻名数据网格是该套件的突出特性之一。尝试网格上下文菜单使用进度控制面板应用程序或从VS扩展安装Telerik后开始创建您的项目类型为Telerik UI for ASP. NET Core为项目选择一个路径选择更适合您项目的技术HTML 或 Tag Helpers对于这个例子我选择了Grid and Menu模板。为项目选择一个主题。确认下一个屏幕项目看起来像这样网格上下文菜单Grid组件中的ContextMenu选项公开了许多复杂的特性使开发人员能够更有效、更直观地与网格材料进行交互。下面是一些网格的ContextMenu特性和功能的描述1. Header上下文菜单排序在标题上下文菜单中用户可以直接从上下文菜单中对网格列进行排序从而改善用户体验。导出它支持将网格数据导出为多种格式如PDF、Excel和其他格式允许数据共享和报告。2. Body上下文菜单选择此功能允许您在网格中选择单个行或单元格。编辑现在可以直接编辑网格内容简化了数据更新的用户交互。复制选择用户可以复制选定的单元格或行以便在其他地方更容易地使用数据。不带headers的复制选择它允许您在不带标头的情况下复制所选数据从而在数据使用方面提供更大的灵活性。重新排序行重新排序工具允许用户根据他们的选择或需要重新排列行。3. 数据驱动的自定义操作条件操作开发人员可以设置上下文菜单根据网格中的数据显示不同的选项。例如可以根据行或单元格中的值显示或隐藏特定的菜单选项。动态菜单选项上下文菜单的选项可以动态调整允许对网格数据做出更灵敏和智能的反应。4. 可扩展性自定义菜单项开发人员可以添加触发特定操作的自定义菜单项根据项目需求扩展网格的功能。代码是如何工作的?在GridController上更改了代码以返回想要的数据1. using Kendo.Mvc.Extensions; 2. using Kendo.Mvc.UI; 3. using Microsoft.AspNetCore.Mvc; 4. using TelerikAspNetCoreApp1.Models; 5. 6. namespace TelerikAspNetCoreApp1.Controllers; 7. public class GridController : Controller 8. { 9. public ActionResult Orders_Read([DataSourceRequest] DataSourceRequest request) 10. { 11. var result Enumerable.Range(2, 51).Select(i new OrderViewModel 12. { 13. OrderID i, 14. Freight i * 10, 15. OrderDate new DateTime(2023, 9, 15).AddDays(i % 7), 16. ShipName ShipName i, 17. ShipCity ShipCity i 18. }); 19. 20. var customRet result.ToList(); 21. 22. customRet.Insert(0, new OrderViewModel 23. { 24. OrderID 1, 25. Freight 1 * 10, 26. OrderDate new DateTime(2023, 9, 15).AddDays(1 % 7), 27. ShipName Brazil, 28. ShipCity Porto Alegre 29. }); 30. 31. 32. var dsResult customRet.ToDataSourceResult(request); 33. return Json(dsResult); 34. } 35. }现在第一行包含上下文菜单中的选项将监视的特定数据。在Index.cshtml中添加了两个通知1. (Html.Kendo().Notification() 2. .Name(notification) 3. .Position(p p.Pinned(true).Top(60).Left(30)) 4. .AutoHideAfter(3000) 5. ) 6. 7. (Html.Kendo().Notification() 8. .Name(notificationOk) 9. .Position(p p.Pinned(true).Top(30).Left(30)) 10. .AutoHideAfter(2500) 11. )将ContextMenu方法添加到Grid组件中1. (Html.Kendo().GridTelerikAspNetCoreApp1.Models.OrderViewModel() 2. .Name(grid) 3. .ContextMenu(添加Head方法和需求的选项1. (Html.Kendo().GridTelerikAspNetCoreApp1.Models.OrderViewModel() 2. .Name(grid) 3. .ContextMenu(menu menu 4. .Head(head 5. { 6. head.Create(); 7. head.Separator(); 8. head.SortAsc(); 9. head.SortDesc(); 10. head.Separator(); 11. head.ExportPDF().Text(Generate Pdf File).Icon(file); 12. head.ExportExcel(); 13. })在这个示例中向ExportPDF()添加了一个自定义文本。在Body方法中添加需要的选项1. (Html.Kendo().GridTelerikAspNetCoreApp1.Models.OrderViewModel() 2. .Name(grid) 3. .ContextMenu(menu menu 4. .Head(head 5. { 6. head.Create(); 7. head.Separator(); 8. head.SortAsc(); 9. head.SortDesc(); 10. head.Separator(); 11. head.ExportPDF().Text(Generate Pdf File).Icon(file); 12. head.ExportExcel(); 13. }) 14. .Body(body 15. { 16. body.Edit(); 17. body.Destroy(); 18. body.Separator(); 19. body.Select(); 20. body.CopySelection(); 21. body.CopySelectionNoHeaders(); 22. body.Separator(); 23. body.ReorderRow(); 24. body.Custom(myTool).Text(Check status).Icon(gear); 25. 26. }) 27. )在Body方法上添加了一个自定义命令“Check status”注意自定义名称“myTool”。在Index.cshtml上添加脚本1. script 2. 3. kendo.ui.grid.commands[myToolCommand] kendo.ui.grid.GridCommand.extend({ 4. exec: function () { 5. 6. var selectedItems $(#grid).data(kendoGrid).selectedKeyNames(); 7. var actualItems []; 8. 9. if (selectedItems.length 0) { 10. selectedItems.forEach(function (key) { 11. 12. var item grid.dataSource.get(key); 13. if (item.ShipCity Porto Alegre) { 14. var popupNotification $(#notification).data(kendoNotification); 15. popupNotification.show(This city ’${item.ShipCity}’ is temporary blocked!, error) 16. } 17. else { 18. actualItems.push(item); 19. } 20. }); 21. } 22. if (actualItems.length 0) { 23. var popupNotification $(#notificationOk).data(kendoNotification); 24. popupNotification.show(’${actualItems.length}’ cities available!, info) 25. } 26. } 27. }); 28. 29. /script通过在网格命令的名称中添加“command”名称“myTool”成为命令1. kendo.ui.grid.commands[myToolCommand] kendo.ui.grid.GridCommand.extend({ 2. ...下图显示了工作演示现在当点击“Check status”时它将执行如下验证1. var selectedItems $(#grid).data(kendoGrid).selectedKeyNames(); 2. var actualItems []; 3. 4. if (selectedItems.length 0) { 5. selectedItems.forEach(function (key) { 6. 7. var item grid.dataSource.get(key); 8. if (item.ShipCity Porto Alegre) { 9. var popupNotification $(#notification).data(kendoNotification); 10. popupNotification.show(This city ’${item.ShipCity}’ is temporary blocked!, error) 11. } 12. else { 13. actualItems.push(item); 14. } 15. }); 16. } 17. if (actualItems.length 0) { 18. var popupNotification $(#notificationOk).data(kendoNotification); 19. popupNotification.show(’${actualItems.length}’ cities available!, info) 20. }下面一行接收所有选定的键值1. var selectedItems $(#grid).data(kendoGrid).selectedKeyNames();下面一行通过键获取数据记录1. var item grid.dataSource.get(key);下面这一行分析了模型中的属性/列ShipCity1. if (item.ShipCity Porto Alegre)通知将显示如下内容1. if (actualItems.length 0) { 2. var popupNotification $(#notificationOk).data(kendoNotification); 3. popupNotification.show(’${actualItems.length}’ cities available!, info) 4. }你需要做一些额外的配置才能使这个示例正常工作添加Model方法并并定义网格的唯一Id使用.Model(model model. Id(p p.**OrderID**))1. .DataSource(dataSource dataSource 2. .Ajax() 3. .Model(model model.Id(p p.OrderID)) 4. .PageSize(20) 5. .Read(read read.Action(Orders_Read, Grid)) 6. ) 7. )在OrderViewModel上为OrderID定义[Key]1. [Key] 2. public int OrderID 3. { 4. get; 5. set; 6. }下面是Grid组件的完整定义1. (Html.Kendo().GridTelerikAspNetCoreApp1.Models.OrderViewModel() 2. .Name(grid) 3. .ContextMenu(menu menu 4. .Head(head 5. { 6. head.Create(); 7. head.Separator(); 8. head.SortAsc(); 9. head.SortDesc(); 10. head.Separator(); 11. head.ExportPDF().Text(Generate Pdf File).Icon(file); 12. head.ExportExcel(); 13. }) 14. .Body(body 15. { 16. body.Edit(); 17. body.Destroy(); 18. body.Separator(); 19. body.Select(); 20. body.CopySelection(); 21. body.CopySelectionNoHeaders(); 22. body.Separator(); 23. body.ReorderRow(); 24. body.Custom(myTool).Text(Check status).Icon(gear); 25. 26. }) 27. ) 28. .Columns(columns 29. { 30. columns.Bound(p p.OrderID).Filterable(false); 31. columns.Bound(p p.Freight); 32. columns.Bound(p p.OrderDate).Format({0:MM/dd/yyyy}); 33. columns.Bound(p p.ShipName); 34. columns.Bound(p p.ShipCity); 35. }) 36. .Selectable(selectable selectable 37. .Mode(GridSelectionMode.Multiple)) 38. .Pageable() 39. .Sortable() 40. .Scrollable() 41. .Groupable() 42. .Filterable() 43. .HtmlAttributes(new { style height:550px; }) 44. .DataSource(dataSource dataSource 45. .Ajax() 46. .Model(model model.Id(p p.OrderID)) 47. .PageSize(20) 48. .Read(read read.Action(Orders_Read, Grid)) 49. ) 50. )

相关新闻

WinForm应用实战开发指南 - 如何实现工具栏/菜单的动态呈现?

WinForm应用实战开发指南 - 如何实现工具栏/菜单的动态呈现?

在Winform系统开发中,为了对系统的工具栏/菜单进行动态的控制,我们对系统的工具栏/菜单进行动态配置,这样可以把系统的功能弹性发挥到极致。通过动态工具栏/菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过…

2026/7/23 18:20:58阅读更多 →
深入解析以太网MAC寄存器:统计、VLAN与PTP时间戳实战指南

深入解析以太网MAC寄存器:统计、VLAN与PTP时间戳实战指南

1. 以太网MAC寄存器:嵌入式网络开发的基石在嵌入式网络开发中,以太网MAC控制器是连接物理层与上层协议栈的桥梁,其性能与功能的精细控制,很大程度上依赖于对一系列硬件寄存器的深入理解和正确配置。很多开发者可能只停留在调用驱动…

2026/7/23 18:20:58阅读更多 →
WinForm应用实战开发指南 - 如何实现通用业务编码规则生成?

WinForm应用实战开发指南 - 如何实现通用业务编码规则生成?

在我们很多应用系统中,往往都需要根据实际情况生成一些编码规则,如订单号、入库单号、出库单号、退货单号等。有时候根据规则自行增加一个函数来生成处理,不过仔细观察后,发现它们的编码规则有很大的共通性,因此可以考…

2026/7/23 18:18:57阅读更多 →
SpringBoot18-集成Redis

SpringBoot18-集成Redis

一、SpringBoot集成Redis1-1、先理解:什么是 Redis?Redis 就是一个超快的数据库,但它专门存 数据在内存里(不是硬盘)。你可以把它想象成:一个超级快的“笔记本”,用来暂时记一些数据。 比如&…

2026/7/23 19:39:16阅读更多 →
《手把手教你写一个生产级 K8s Operator:CRD + Controller + Webhook 全链路实践》

《手把手教你写一个生产级 K8s Operator:CRD + Controller + Webhook 全链路实践》

K8s Operator 控制器 进行深度全链路实践,增加以下生产级特性:并发协调控制(MaxConcurrentReconciles)事件记录(Event Recorder)最终一致性保证(Requeue 策略优化)子资源冲突处理&am…

2026/7/23 19:39:16阅读更多 →
软路由玩家必看:在PVE7.3上实现iKuai+OpenWRT双路由+NAS+Win10的5个性能优化技巧

软路由玩家必看:在PVE7.3上实现iKuai+OpenWRT双路由+NAS+Win10的5个性能优化技巧

软路由性能调优实战:从J4125到PVE,榨干每一分硬件潜力的进阶指南 如果你已经成功在J4125小主机上部署了PVE,并搭建了iKuai主路由、OpenWRT旁路由、NAS乃至Windows 10的All-in-One系统,那么恭喜你,已经迈入了高阶玩家的行列。但搭建成功只是第一步,真正的挑战在于如何让这…

2026/7/23 19:39:16阅读更多 →
厨卫翻新不搬家如何选择:牛牛快装等服务适用场景

厨卫翻新不搬家如何选择:牛牛快装等服务适用场景

厨卫翻新不搬家:如何理性选择“快与净”的局部改造服务在老旧小区的居住体验中,厨卫空间往往是痛点最集中的区域。水管老化、瓷砖空鼓、防水失效等问题直接影响日常生活品质。然而,传统装修伴随的噪音污染、粉尘飞扬以及漫长的工期&#xff0…

2026/7/23 19:39:16阅读更多 →
6月“WAVES挑战赛”收官,广州超90万㎡科技园助力大湾区科创发展!

6月“WAVES挑战赛”收官,广州超90万㎡科技园助力大湾区科创发展!

【导语:6月,“WAVES有智青年挑战赛”在广州大学城科技园圆满结束。该园区由信投公司打造、管理公司运营,整合八大板块,总建面超90万平方米,为科创项目提供全周期落地解决方案,助力大湾区科创发展。】超90万…

2026/7/23 19:39:16阅读更多 →
基于GFL_R101_FPN的肠球菌自动检测系统开发

基于GFL_R101_FPN的肠球菌自动检测系统开发

1. 项目背景与核心价值肠球菌检测在医疗诊断、食品安全和环境监测等领域具有重要应用价值。传统检测方法通常依赖人工镜检或培养法,存在耗时长、主观性强等局限性。我们基于GFL_R101_FPN_MS-2x_COCO模型开发的自动检测系统,将目标检测技术引入微生物识别…

2026/7/23 19:37:16阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →