2

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

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

但是当我运行页面时,它有一个 jquery 解析错误:invalid expression term '>'。所以我猜代码已经生成,但服务器没有将 <%= button.ClientID %> 转换为生成的 ID 格式。那么在这种情况下我应该怎么做呢?

4

3 回答 3

2

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

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

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

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

于 2013-04-04T16:26:57.967 回答
0

在 aspx 文件中:

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

在 .js 文件中:

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

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

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

希望这有帮助!

于 2013-04-05T09:15:15.500 回答
0

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

所以你会有:

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

代替

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

附带说明:

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

于 2013-04-04T18:33:40.213 回答