我发现自己不得不使用asp:repeater控件修改.ascx文件中列出的产品列表的遗留项目,每次名称时我都要添加一个Google跟踪代码管理器脚本(从现在开始的GTM)单击产品(HTML锚点)。
我的方法一直试图将产品的所有属性存储在标记内的javascript变量中,并在锚点onclick事件中调用它们,如下所示:
<asp:Repeater ID="RpProductos" runat="server">
<HeaderTemplate>
<div id="ListadoProductos">
</HeaderTemplate>
<ItemTemplate>
<script>
var ruta = '<%# HtmlRutaPagina(Eval("IdProducto"),(string) Eval("Titulo")) %>';
var producto = {
"name": "<%# Eval("Titulo")%>",
"id": "<%# Eval("IdProducto")%>",
"price": "<%#Eval("Precio")%>",
"brand": "<%# Eval("Autor")%>",
"category": "<%# HtmlTipoProducto((int)Eval("IdTipoProducto")) %>",
"variant": "",
"list": "Search Results",
"position": contadorProductos
};
window[<%# Eval("IdProducto")%>] = producto;
impresionesGTM.push(window[<%# Eval("IdProducto")%>]);
function clickProducto(ruta,producto) {
scriptGTMClick(ruta, producto);
window.location = ruta;
}
</script>
<div class="ImgProducto">
<a onclick="clickProducto(ruta, producto);" title='<%# Eval("titulo")%>'>
<img src='<%# HtmlRutaImg((int)Eval("idproducto")) %>' alt='<%# Eval("Titulo")%>' title='<%# Eval("Titulo")%>' width="80" /></a>
</div>
<h2><a href='<%# HtmlRutaPagina((int)Eval("idproducto"),(string) Eval("titulo")) %>' title='<%# Eval("titulo")%>'><%# Eval("titulo")%></a></h2>
<div class="CajaLisCabecera">
<p class="col25">Tipo: <span class="strong"><%# HtmlTipoProducto((int)Eval("idtipoproducto")) %></span></p>
<p class="col75">Subcategoría: <span class="strong"><%# HtmlTipoSubCategoria((int) Eval("idsubcategoria")) %> </span></p>
<p>Autor: <span class="strong"><%# Eval("Autor") %></span></p>
<div><%#Eval("DESCRIPCIONBREVE") %></div>
</div>
<hr />
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
但无论我尝试多少种方法(甚至在de“onclick”属性中插入完整的产品对象,它总是给我错误“数据绑定方法,如Eval(),XPath()和Bind( )只能在数据绑定控件的上下文中使用。“
我已经在这几个小时内苦苦挣扎了,虽然这里可能有些聪明人可能知道答案......关于我怎么处理这个问题的想法? 我已经考虑过在标签中存储所有需要的变量,但它并不是很干净。
作为最后一点,我更喜欢一种不涉及删除asp:repeater或修改大量服务器代码的解决方案,因为我必须重复这个过程,并且即使没有它也可以持续很长时间。 ..