我正在使用一些.Net 4.0 webforms控件,例如Menu控件,虽然我认为我现在可以声明控件的呈现方式(即作为表格或div),但我不能关闭管理这些控件的悬停事件的自动包含的javascript,例如:
new Sys.WebForms.Menu({ element: 'NavigationMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false }
这显示在拥有此类控件的每个页面的底部。
鉴于没有办法实际关闭它,有什么方法可以禁用此脚本,覆盖它或以其他方式呈现它无能为力,以便我可以在其位置定义自己的jQuery方法?
答案 0 :(得分:2)
嗯,您可以尝试的是在包含Webforms脚本之后包含一些javascript,执行以下操作:
Sys.WebForms.Menu = function() {};
基本上,这会覆盖webforms菜单javascript什么都不做。但要小心,特别是如果您已经使用这些菜单的现有项目,因为他们的javascript将不再有效。
就个人而言,我建议使用像Repeater或ListView这样更“精简”的控件来创建自己的菜单标记,css和javascript。这样可以避免大多数这些问题,并且您可以更好地控制输出。
答案 1 :(得分:1)
在我们的应用程序中遇到遗留代码时遇到(或者只是注意到)类似的问题。
与Phil.Wheeler一样,也使用Sitemap数据源。不确定将渲染模式更改为3.5对我们来说是一件好事,并且脚本无法覆盖Sys.WebForms.Menu不起作用。
问题:
此代码会自动神奇地插入每个aspx页面:
<script type='text/javascript'>new Sys.WebForms.Menu({ element: 'ctl00_MainNavMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false });</script>
我们的网页都没有ID为'ct100_MainNavMenu'的元素,所以我们在MenuStandards.js中看到一个javascript错误,解析了tagName ==='DIV'。 this.element为null。
Sys.WebForms.Menu = function(options) {
this.items = [];
this.depth = options.depth || 1;
this.parentMenuItem = options.parentMenuItem;
this.element = Sys.WebForms.Menu._domHelper.getElement(options.element);
if (this.element.tagName === 'DIV') {
var containerElement = this.element;
this.element = Sys.WebForms.Menu._domHelper.firstChild(containerElement);
this.element.tabIndex = options.tabIndex || 0;
options.element = containerElement;
options.menu = this;
this.container = new Sys.WebForms._MenuContainer(options);
Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? "right" : "left");
}
else {
this.container = options.container;
this.keyMap = options.keyMap;
}
将以下内容添加到我们的ASPX主文件中,因为标记之前的最后一个html似乎有效(它解决了问题):
<div id="ctl00_MainNavMenu" style="display:none">
<div id="neededToPreventSecondErrorAt_tabIndex"></div>
</div>
呈现的HTML如下所示:
<div id="ctl00_MainNavMenu" style="display: none; float: left;">
<div tabindex="0" role="menubar" class="static" style="position: relative; width: auto; float: left;"></div>
</div>
在我们的任何ASPX页面上都没有看到任何不良影响,在IE,FF和Chrome上进行测试。显然,如果在具有相同ID的页面上创建元素,则会出现问题。除非我们重做我们的应用程序菜单,否则不确定它的可能性。我不认为它比覆盖webforms菜单javascript更糟糕/风险更大。