我想创建一个onclick事件,像这样
onClientClick="document.querySelector('[KPI="31"]').value = '';return false;"
KPI= value必须是数据绑定的,所以我使用如下代码
onClientClick="<%# document.querySelector('[KPI=Eval("KPI_ID")]').value = '';return false; %>"
但是我得到一个错误,说服务器代码没有很好地定义。
如果你的数据源是一个对象的集合,你正在请求一个名为KPI_ID的属性,你可以避免使用Eval和使用Item或Container.DataItem.
对我来说最简单的方法就是容器。DataItem,因为我不知道要绑定到的是哪种控件。容器。DataItem应该是您的对象,因此您只需要将它强制转换为您的dataType
onClientClick="document.querySelector('[KPI=<%# ((YourDataType)Container.DataItem).KPI_ID %>)]').value = '';return false;"
如果你在。net 4.5中使用中继器,你可以将中继器的ItemType设置为你的DataType,这样你就可以将((YourDataType)Container.DataItem)替换为Item:
onClientClick="document.querySelector('[KPI=<%# Item.KPI_ID %>)]').value = '';return false;"
如果你不使用一个对象的属性,KPI_ID是一个字符串,用来获取实际值,例如,如果它在DataRow中,你必须避免在整个字符串中使用",而不让编译器知道它不是属性的结束。你可以使用'来指示属性的开始和结束,并使用字符串。格式,使javascript中的单引号'是文本的一部分,编译器知道它不是属性的结束:
onClientClick='<%# string.Format("document.querySelector('[KPI={0}]').value = '';
return false;", Eval("KPI_ID")) %>'
更新:要支持额外的双引号,可以这样做:
onClientClick='<%# string.Format("document.querySelector('[KPI="{0}"]').value = '';
return false;", Eval("KPI_ID")) %>'
可以用Item代替Eval("KPI_ID")。KPI_ID或((YourDataType)Container.DataItem)。KPI_ID,如果你想避免使用Eval