当我使用母版页时,为什么这个JS会失败? (ASP.NET)

时间:2011-04-07 14:11:07

标签: c# asp.net ajax autocompleteextender

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

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

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

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

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

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

5 个答案:

答案 0 :(得分:1)

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

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

示例:

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

答案 1 :(得分:0)

在您的网页上尝试查看来源,并确保&lt; input&gt;仍然命名为txtName。有时使用母版页,名称会更改。

答案 2 :(得分:0)

你可以试试这个:

('&lt;%= txtName.ClientID&gt;')._ onMethodComplete = function(result,context){

答案 3 :(得分:0)

如果您正在使用.NET 4,那么您可以将ClientIDMode="Static"添加到页面指令中,这将告诉ASP.NET保持它不受元素ID的影响。

答案 4 :(得分:0)

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

相关问题