在GridView的Eval中为LinkButton的OnClientClick传字符串至JS函数出错
问题出在你生成的JavaScript代码里,字符串参数没有被引号包裹,导致JS引擎把它当成未定义的变量,从而抛出Uncaught ReferenceError。比如当Name的值是张三时,当前代码生成的语句是test(1,张三);,这里张三没有引号,JS会认为它是一个变量而非字符串。
修改方案1:直接为字符串参数添加引号
修改OnClientClick的绑定表达式,给Eval("Name")的结果包裹双引号(注意用\"转义,因为外层用了单引号包裹OnClientClick的值):
<asp:LinkButton ID="btnVCharge" runat="server" Text='<%# Eval("Name") %>' OnClientClick='<%# "test(" + Eval("Id") + ",\"" + Eval("Name") + "\");" %>'> </asp:LinkButton>
修改方案2:处理含特殊字符的字符串(推荐)
如果Name字段可能包含单引号、双引号或换行等特殊字符,建议用HttpUtility.JavaScriptStringEncode方法对字符串进行编码,避免JS语法错误:
首先确保页面引入了System.Web命名空间(一般默认已引入),然后修改表达式:
<asp:LinkButton ID="btnVCharge" runat="server" Text='<%# Eval("Name") %>' OnClientClick='<%# $"test({Eval("Id")},\"{HttpUtility.JavaScriptStringEncode(Eval("Name").ToString())}\");" %>'> </asp:LinkButton>
验证效果
修改后生成的HTML会类似这样:
<a id="GridView1_btnVCharge_0" href="javascript:__doPostBack('GridView1$ctl02$btnVCharge','')" onclick="test(1,'张三');return false;">张三</a>
此时JavaScript函数test能正确接收整数和字符串参数,弹窗正常显示内容。
内容的提问来源于stack exchange,提问作者Rahul Aggarwal
相关产品推荐
相关产品推荐

