You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GridView的Eval中为LinkButton的OnClientClick传字符串至JS函数出错

解决GridView中LinkButton的OnClientClick传递字符串参数问题

问题出在你生成的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:20:38