【问题标题】:Why does this JS fail when I use a master page? (ASP.NET)为什么我使用母版页时这个 JS 会失败? (ASP.NET)
【发布时间】:2011-04-07 14:11:07
【问题描述】:

我目前正在处理一个需要使用大量 AJAX AutoCompleteExtenders 的项目,并且它们运行良好 - 但现在我正在整理代码并实现母版页,我遇到了问题.我有这个 JS:

$find('txtName')._onMethodComplete = function(result, context) {

$find('txtName')._update(context, result, false);
webservice_callback(result,context);
};

当我加载页面时,会发生与那个 sn-p 相关的错误:

Microsoft JScript 运行时错误:'null' 为 null 或不是对象

重申一下,这仅在我出于某种奇怪的原因拥有母版页时才会发生。有什么想法吗?

【问题讨论】:

  • 你试过用firebug在firefox上调试吗?那有一个很好的 javascipt 调试器,相比之下,Internet Explorer 几乎没用
  • @Hawxby - 我不同意。如果您知道自己在做什么,IE javascript 调试器比 FireBug 有用得多。
  • 在 8 中更是如此,在 9 中更是如此,但在那之前非常糟糕。因为我不知道工作环境中使用的 IE 版本,所以安装 firefox 和 firebug 可能比更新 IE 更简单。

标签: c# asp.net ajax autocompleteextender


【解决方案1】:

您需要使用<%=txtName.ClientID%>,因为在使用母版页时,您的 ID 将被破坏以避免母版页和 aspx/usercontrols 等之间的名称冲突。

但是请注意,为了能够使用<%=,您必须在 ASP.NET 标记代码中包含 JS。这可以通过 IIS #include 来完成,而不是使用 script 的 src。

例子:

<!-- #Include virtual=".\JS\YourJSFileWithASPNETMarkup.js" -->

【讨论】:

    【解决方案2】:

    尝试在您的页面上查看源代码并确保 仍然命名为 txtName。有时,母版页的名称会发生​​变化。

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      ('')._onMethodComplete = function(result, context) {

      【讨论】:

        【解决方案4】:

        如果您使用的是 .NET 4,那么您可以将 ClientIDMode="Static" 添加到 page 指令中,这会告诉 ASP.NET 保持对元素 ID 的脏手。

        【讨论】:

          【解决方案5】:

          当您使用母版页时,控件的 ID 会发生变化,因此您不能在 Javascript 中使用相同的 ID,而是可以像这样修改您的选择器:$('input[id*="txtName"]')现在它找到所有具有包含 txtName 的 id 的控件。您可以使用多种不同的选择器。 here is a useful link

          【讨论】:

            猜你喜欢
            • 2021-02-22
            • 1970-01-01
            • 1970-01-01
            • 2012-04-20
            • 2010-12-15
            • 1970-01-01
            • 2012-07-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多