Javascript 如何使用<;%=control.ClientID%>;在服务器控件中嵌入JS文件

Javascript 如何使用<;%=control.ClientID%>;在服务器控件中嵌入JS文件,javascript,asp.net,custom-server-controls,Javascript,Asp.net,Custom Server Controls,我正在一个库项目中创建一个服务器控件,它有javascript代码,javascript代码需要获取一个按钮的ID,所以我使用了。然后,我将javascript代码作为文件嵌入到库项目中,并使用ScriptManager在CreateChildControls()中添加脚本 但是当我运行页面时,它有一个jquery解析错误:无效的表达式术语'>'。所以我猜代码已经生成了,但服务器并没有转换成生成的ID格式。那么在这种情况下我该怎么办 设置一个非常特定的CSS类名,而不是按钮名称: <asp

我正在一个库项目中创建一个服务器控件,它有javascript代码,javascript代码需要获取一个按钮的ID,所以我使用了。然后,我将javascript代码作为文件嵌入到库项目中,并使用ScriptManager在CreateChildControls()中添加脚本


但是当我运行页面时,它有一个jquery解析错误:无效的表达式术语'>'。所以我猜代码已经生成了,但服务器并没有转换成生成的ID格式。那么在这种情况下我该怎么办

设置一个非常特定的CSS类名,而不是按钮名称:

<asp:Button ID="btnMyGroovy" runat="server" CssClass="VerySpecific" Text="Action" />

然后使用
jQuery
选择器获取
$('.verysspecific')
,而不是控件名。请记住,项可以有多个类关联。:)


通过选择服务器控件CSS类,例如
.verysspecificContainer
,然后选择控件包含的.verysspecific的实例,可以使选择更加精确

这通常是一种很好的方法,可以参数化外部javascript文件函数,使它们在使用asp.net时不必出现在页面上

所以你会:

function foo (sender)
{
   return $(sender).val();
}
而不是

function foo ()
{
   return $("<%= sender.ClientID %>").val();
}
函数foo()
{
返回$(“”)。val();
}
旁注:

您知道吗,如果使用Asp.Net 4或更高版本,您可以将id设置为静态,这意味着id将与服务器端和客户端上的名称匹配,那么您不需要标记来确定id。这可以在web.config或apge顶部的page指令中设置。

在aspx文件中:

var serverPrefix ='<%= ClientID %>';
当您要调用某个元素时,请使用以下命令:

$(getServerId('myTitleTxt')).text('hello!');

希望这有帮助

所以我用了
…你能展示一下那个代码吗?另外,生成的HTML页面的源代码是什么样子的?这是因为js文件没有在.net运行时运行。它是按原样服务的。在一个aspx页面中,内容被替换为。。。命令,但在.js文件中不是。也许您可以给它一个类,在jQuery中使用它来查找它,就像可能重复的那样:我想只是一个建议,使用
clientdmode=Static
,访问控制,比如
$('#controlId')
@HMR,这是有意义的,那么我想我只能为它使用一个特定的类名。所以任何嵌入式或外部JS文件都应该使用精确的id或类名?因为它不通过服务器端?好的,那太好了,服务器不会自动更改ID,但是您只需要小心使用重复的ID。
function getServerId(id){
  if (typeof(serverPrefix ) != 'undefined')
  {
   return document.getElementById(prefix + '_' + id);
  }
  else
  {
   id;
  }
}
$(getServerId('myTitleTxt')).text('hello!');