1

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

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

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

当我加载页面时,会发生与该片段相关的错误:

Microsoft JScript 运行时错误:“null”为空或不是对象

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

4

5 回答 5

1

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

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

例子:

<!-- #Include virtual=".\JS\YourJSFileWithASPNETMarkup.js" -->
于 2011-04-07T14:16:32.987 回答
0

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

于 2011-04-07T14:15:13.420 回答
0

你可以试试这个:

('<%=txtName.ClientID>')._onMethodComplete = function(result, context) {

于 2011-04-07T14:17:33.143 回答
0

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

于 2011-04-07T14:24:09.510 回答
0

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

于 2011-04-07T14:42:34.997 回答