ASP.NET WebForm ListView传递字母数字item_id至JS函数报错
问题解决方法
错误根源清晰:当item_id是字母数字组合时,渲染后的onclick代码会生成AddToCart(pf10001),JavaScript会把pf10001识别为变量名而非字符串,而该变量未定义,因此抛出ReferenceError。数值类型能正常运行是因为JS直接将数字识别为合法值。
最简易的修复方式是给绑定的item_id加上引号,让JS将其当作字符串参数处理,具体修改方案如下:
方案1:直接拼接引号(基础版)
修改ListView ItemTemplate中的HTML代码,在DataBinder.Eval前后添加转义的双引号:
<a href="#" class="btn btn-sm btn-success" onclick='<%# "javascript:AddToCart(\"" + DataBinder.Eval(Container.DataItem, "item_id") + "\");return false;" %>'>Add to Cart</a>
渲染后生成的代码会是AddToCart("pf10001"),此时JS会正确将pf10001作为字符串传递。
方案2:使用JavaScript字符串编码(安全版)
如果item_id可能包含特殊字符(比如引号、换行),建议用HttpUtility.JavaScriptStringEncode处理,避免XSS或语法错误:
<a href="#" class="btn btn-sm btn-success" onclick='<%# "javascript:AddToCart(\"" + HttpUtility.JavaScriptStringEncode(DataBinder.Eval(Container.DataItem, "item_id").ToString()) + "\");return false;" %>'>Add to Cart</a>
该方法会自动转义字符串中的特殊字符,确保参数传递的安全性和正确性。
内容的提问来源于stack exchange,提问作者mnicks
相关产品推荐
相关产品推荐

