Override the list view web part menu

简介: Sometime we need to customize the menu of a list view web part to implement our own feature.

Sometime we need to customize the menu of a list view web part to implement our own feature.

For example, dynamically change the script of new menu, update menu, etc.

What we shall do is to get the menu object and change its attribute "ClientOnClickScript" or "ClientOnClickNavigateUrl".

From Reflector, we can see the source code as follows:

[DefaultValue(""), Category("Behavior")] public string ClientOnClickScript { get { return this.m_clientOnClickScript; } set { if (value == null) { value = string.Empty; } this.m_clientOnClickScript = value; this.ViewState["ClientOnClickScript"] = value; this.m_clientOnClickNavigateUrl = null; this.ViewState["ClientOnClickNavigateUrl"] = null; this.clientOnClickUsingPostBackEvent = null; } }  

[DefaultValue(""), Category("Behavior")] public string ClientOnClickNavigateUrl { get { return this.m_clientOnClickNavigateUrl; } set { if (value == null) { value = string.Empty; } value = SPUtility.GetServerRelativeUrlFromPrefixedUrl(value); value = value.Replace("'", @"/'"); this.ClientOnClickScript = "window.location = '" + value + "';"; this.m_clientOnClickNavigateUrl = value; this.ViewState["ClientOnClickNavigateUrl"] = value; } }  

In the set method, it will change the other one. That is to say, we can select either to get our feautre done.

Primary code is below:

foreach (Microsoft.SharePoint.WebPartPages.WebPart webpart in this.WebPartManager.WebParts) { if (webpart is ListViewWebPart) { ListViewWebPart listViewWebPart = (ListViewWebPart)webpart; ViewToolBar myViewToolBar = null; foreach (Control control in listViewWebPart.Controls) { if (control is ViewToolBar) { myViewToolBar = (ViewToolBar)control; } } ToolBar myToolBar = (ToolBar)myViewToolBar.Controls[0].FindControl("toolBarTbl"); IEnumerator menus = myToolBar.Buttons.Controls.GetEnumerator(); while (menus.MoveNext()) { if (menus.Current is ActionsMenu) { } else if (menus.Current is NewMenu) { NewMenu newMenu = (menus.Current as NewMenu); MenuItemTemplate newFileMenu = newMenu.MenuTemplateControl.FindControl("New0") as MenuItemTemplate; if (newFileMenu != null) { newFileMenu.Visible = false; } MenuItemTemplate newFolderMenu = newMenu.MenuTemplateControl.FindControl("NewFolder") as MenuItemTemplate; if (newFolderMenu != null) { //newFolderMenu.ClientOnClickNavigateUrl = "/_layouts/LibraryTree/CreateFolder.aspx?mURL=" + redirectURL + "&FolderURL=" + folderPath + "&ListID=" + mListID; newFolderMenu.ClientOnClickScript = "RedirectToURL('" + redirectURL + "','" + folderPath + "','" + mListID + "')"; } } else if (menus.Current is UploadMenu) { UploadMenu uploadMenu = (menus.Current as UploadMenu); MenuItemTemplate singleUploadMenu = uploadMenu.MenuTemplateControl.FindControl("Upload") as MenuItemTemplate; if (singleUploadMenu != null) { singleUploadMenu.ClientOnClickNavigateUrl = "/_layouts/LibraryTree/UploadFile.aspx?mURL=" + redirectURL + "&FolderURL=" + folderPath + "&ListID=" + mListID; //singleUploadMenu.ClientOnClickScript = "window.location.href='/_layouts/LibraryTree/UploadFile.aspx?mURL=" + redirectURL + "&FolderURL=" + folderPath + "&ListID=" + mListID + "';"; } MenuItemTemplate multiUploadMenu = uploadMenu.MenuTemplateControl.FindControl("MultipleUpload") as MenuItemTemplate; if (multiUploadMenu != null) { multiUploadMenu.Visible = false; } } } } } 

The Microsoft doesn't suggest this way, but it is dynamic.

Hava a good time.

相关文章
|
JavaScript 前端开发 数据格式
|
2月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
3月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
55 7
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
66 2
|
3月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
159 62
|
3月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
88 1
|
3月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
3月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
269 45
|
3月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
112 2

热门文章

最新文章

  • 1
    打造高效的Web Scraper:Python与Selenium的完美结合
    13
  • 2
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    26
  • 3
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    20
  • 4
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    54
  • 5
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    342
  • 6
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 7
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    40
  • 8
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    28
  • 9
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    22
  • 10
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    55