ExtJs双ActionResult共用同一Js文件ID冲突解决方案
项目使用MVC+ExtJs实现,权限控制是基于Controller下的ActionResult的,有一个页面因参数不同就需要新建两个ActionResult。
不要问我为何是基于页面级,而不是数据级,我只想说这是历史遗留问题。
现在直面我们的问题,两个ActionResult也就是两个页面,共用同一个Js文件,而这个文件又是ExtJs的,众所周知,ExtJs获取Dom是通过Ext.getCmp('‘)来获取,那么,原来唯一的页面Id现在就变的不唯一了,会出现事件调用混乱。
昨天曾想了几年解决办法。
方法1:获取页面路径+Id后缀,生成唯一ID.
实践,此路不通。
代码如下:var url = window.location.href;
获取结果,获取的是ExtJs的框架页路径,而不是当前面路径。
方法2:页面加载时,自动生成类Guid的Id+Id后缀,生成唯一ID。
未作实践,理论上是可行的。
方法3:使用Js后缀传参,如:LogisticsMgr/MatRequireView.aspx.js?MatType=111
我们就获取这个111,然后再+各控件Id后缀,生成唯一ID.
方法实现:
Ext.namespace("JsHelper"); //获得js文件后面的参数 如test.js?user=wuf created by wufei 2013-10-25 JsHelper.GetJsParamValue = function(param) { var rName = new RegExp("(\\?(.*))?$") var jss = document.getElementsByTagName('script'); for (var i = 0; i < jss.length; i++) { var j = jss[i]; if (j.src && j.src.match(rName)) { var oo = j.src.match(rName)[2]; if (oo && (t = oo.match(/([^&=]+)=([^=&]+)/g))) { for (var l = 0; l < t.length; l++) { r = t[l]; var tt = r.match(/([^&=]+)=([^=&]+)/); if (tt && tt[1] == param) return tt[2]; } } } } return ''; }
方法调用:var idPre = JsHelper.GetJsParamValue("MatType");
至此问题解决,声明ID和获取ID是都加上这个变量就可以了。
备注:此方案无效,因为Js只加载一次,所以后打开的页面获取的参数不正确。
希望高人指点解决方案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述