在OnClientClick事件中使用EVAL()时,服务标签没有很好地形成



我想创建一个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

最新更新