如何在JavaScript中获取ASP.NET LinkButton的CommandArgument值
问题原因
你的代码存在两个核心错误:
- 调用
OnEditClick时没有传递任何参数,导致函数中定义的s和e参数均为undefined,自然无法读取e.CommandArgument属性 CommandArgument是ASP.NET服务器控件的专属属性,仅存在于服务器端的事件处理逻辑中,不会传递到前端JavaScript的事件对象里,因此前端直接读取e.CommandArgument本身就不成立
解决方法
推荐最简单的实现方案:直接将绑定的Id值作为参数传入JavaScript函数即可,无需额外操作DOM:
1. 修改LinkButton的OnClientClick属性
<asp:LinkButton runat="server" ID="lnkEditButton" OnClientClick='<%# "OnEditClick(" + Eval("Id") + ")" %>' Text="Edit" CommandName="EditDocument" CommandArgument='<%#Eval("Id")%>' />
注意这里OnClientClick的外层引号要用单引号,避免和内部的双引号冲突
2. 调整JavaScript函数逻辑
function OnEditClick(docId) { console.log('on edit click fired') var values = []; values[0] = "Enter document description"; values[1] = "Edit"; values[3] = docId; console.log('slowly but surely getting there from here... '+ values[3]) }
如果你的Id是字符串类型,需要给参数加引号,修改OnClientClick为:
OnClientClick='<%# "OnEditClick(\"" + Eval("Id") + "\")" %>'
可选方案:传递DOM元素获取属性
如果你需要获取按钮的更多属性,也可以将当前元素本身传入函数:
OnClientClick="OnEditClick(this)"
然后JS中读取元素的属性即可(ASP.NET会将CommandArgument渲染为元素的commandArgument自定义属性):
function OnEditClick(btn) { console.log('on edit click fired') var docId = btn.getAttribute('commandArgument'); var values = []; values[0] = "Enter document description"; values[1] = "Edit"; values[3] = docId; console.log('slowly but surely getting there from here... '+ values[3]) }
内容的提问来源于stack exchange,提问作者abhi
相关产品推荐
相关产品推荐

