删除,替换或禁用动态生成的ASP.Net js代码

时间:2010-07-16 10:57:58

标签: javascript asp.net webforms code-injection

我正在使用一些.Net 4.0 webforms控件,例如Menu控件,虽然我认为我现在可以声明控件的呈现方式(即作为表格或div),但我不能关闭管理这些控件的悬停事件的自动包含的javascript,例如:

new Sys.WebForms.Menu({ element: 'NavigationMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false }

这显示在拥有此类控件的每个页面的底部。

鉴于没有办法实际关闭它,有什么方法可以禁用此脚本,覆盖它或以其他方式呈现它无能为力,以便我可以在其位置定义自己的jQuery方法?

2 个答案:

答案 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更糟糕/风险更大。