我在库项目中创建一个服务器控件,其中包含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格式。那么在这种情况下我该怎么办?
答案 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!');
希望这有帮助!