0

我正在尝试在中继器中执行此操作:

<%# Iif((int)DataBinder.Eval(Container.DataItem, "Id") == SelectedJobDefId, "blue", "red")%>

问题是成员属性仅在使用此语法时才评估:

<%= SelectedJobDefId %>

DataBinder.Eval() 仅在使用哈希符号时才有效。

作为测试,我尝试了这个:

  <%= SelectedJobDefId %>
  <%# DataBinder.Eval(Container.DataItem, "Id") + " " + SelectedJobDefId %>

当我切换行(LinkBut​​ton 事件)时,第一个 SelectedJobDefId 保持正确。DataBinder 部分对于每一行都是正确的。SelectedJobDefId 的第二个输出始终为“1”。

如何比较这两个值?

更新:

根据 Jeremy 的建议,我将 td 设置为服务器标签,并尝试在 OnItemDataBound 中执行如下逻辑:

protected void Repeater2_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        DataRowView drv = (DataRowView)item.DataItem;

        int id = (int)drv.Row.ItemArray[0];

        HtmlTableCell td = (HtmlTableCell)item.FindControl("failtd");

        if (id == this.SelectedJobDefId){td.BgColor = "green";}
    }

当我单步调试调试器时,OnItemDataBound 事件发生更新 SelectedJobDefId 属性的 LinkBut​​ton 事件之前,该属性解释了默认值 1。

有没有办法切换事件的顺序?我可能只是采取了错误的方法。

4

2 回答 2

1

只是把它作为一种选择,虽然显然不是最有效的方法。

Repeater更新后,您可以在LinkButton单击处理程序中显式重新绑定SelectedJobDefId。这样,您应该能够保留您最初拥有的所有 aspx 标记。

于 2012-04-19T12:36:09.623 回答
0

我可以通过在 LinkBut​​ton Click() 事件中使用 NamingContainer 属性来解决事件顺序问题,如下所示:

RepeaterItem item = (RepeaterItem)((LinkButton)sender).NamingContainer;      
HtmlTableCell td = (HtmlTableCell)item.FindControl("SelectTd");
td.BgColor = "purple";

为了完成这项工作,我创建了目标 td runat="server" 并将其命名为“SelectTd”。这有点令人不快,所以我可能只是在 jQuery 中通过隐藏字段来存储所选项目。

于 2012-04-18T21:48:21.987 回答