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

时间:2013-04-04 15:39:12

标签: javascript asp.net custom-server-controls

我在库项目中创建一个服务器控件,其中包含javascript代码,javascript代码需要获取按钮的ID,因此我使用了<%= button.ClientID%>。然后我将javascript代码作为文件嵌入到库项目中,并使用ScriptManager在CreateChildControls()中添加脚本。

Dim sm = ScriptManager.GetCurrent(Me.Page) 
sm.Scripts.Add(New ScriptReference("xxx.js", "LibraryProjectName"))   

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

3 个答案:

答案 0 :(得分:1)

而不是按钮名称设置一个非常具体的CSS类名:

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

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

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

答案 1 :(得分:0)

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

所以你会:

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

而不是

function foo ()
{
   return $("<%= sender.ClientID %>").val();
}

旁注:

如果您使用的是Asp.Net 4或更高版本,您是否知道可以将id设置为静态,这意味着Id将与服务器端和客户端的名称匹配,那么您不需要&lt; %%&gt;用于确定id的标签。这可以在您的web.config中或在apge顶部的页面指令中设置。

答案 2 :(得分:0)

在aspx文件中:

var serverPrefix ='<%= ClientID %>';

在js文件中:

function getServerId(id){
  if (typeof(serverPrefix ) != 'undefined')
  {
   return document.getElementById(prefix + '_' + id);
  }
  else
  {
   id;
  }
}

如果要调用某个元素,请使用如下:

$(getServerId('myTitleTxt')).text('hello!');
希望这有帮助!