我在一个库项目中创建一个服务器控件,其中有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!');
希望这有帮助!