如何使用<%=控件。客户端 ID%> 在具有嵌入式 JS 文件的服务器控件中



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

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

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

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

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

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

您可以通过选择服务器控件CSS类(例如)使选择更精确。.VerySpecificContainer则选择的实例。VerySpecific 被控制所包含。

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

也就是:

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

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

边注:

你知道你可以设置id为静态的,如果你正在使用Asp。Net 4或更高版本,这意味着Id将与服务器端和客户端上的名称匹配,那么您不需要<% %>标记来确定Id。这可以在你的网页中设置。

在aspx文件中:

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

:

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

当你想调用某个元素时,像这样使用:

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

希望这有帮助!

最新更新