asp.net如何使用findControl在中继器内获取div

asp.net如何使用findControl在中继器内获取div,asp.net,vb.net,repeater,findcontrol,Asp.net,Vb.net,Repeater,Findcontrol,我在中继器中有一个div,它的id是从数据源的记录中获取的id 我试图做的是改变一些div的背景颜色(通过一个查询来查找特定的数据),我尝试了不同的方法,但是我无法得到div,它们总是空的。我将aspx和当前代码放在后面 ASPX 代码隐藏 Private Sub rptDaFare_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rptDaFare.ItemDataBound If (e

我在中继器中有一个div,它的id是从数据源的记录中获取的id 我试图做的是改变一些div的背景颜色(通过一个查询来查找特定的数据),我尝试了不同的方法,但是我无法得到div,它们总是空的。我将aspx和当前代码放在后面

ASPX


代码隐藏

Private Sub rptDaFare_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rptDaFare.ItemDataBound
        If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then
            Dim data As Date = Date.ParseExact(txtData.Text, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
            Dim attivita = dbVulcano.Attivita.Where(Function(a) a.Completato = False And (a.IDUtente = -1 Or a.IDUtente = ddlTec.SelectedValue) And (a.DataInizio.HasValue = False Or a.DataInizio <> data) And (a.inCorso = False Or a.inCorso.HasValue = False))
            For Each att In attivita
                Dim div As HtmlGenericControl = TryCast(e.Item.FindControl(att.ID), HtmlGenericControl)
                If att.DataInizio <= Date.Today Then
                    div.Style("background-color") = "red"
                Else
                    div.Style("background-color") = "antiquewhite"
                End If
            Next
        End If

    End Sub
Private子rptDaFare\u ItemDataBound(发送方作为对象,e作为RepeaterItemEventArgs)处理rptDaFare.ItemDataBound
如果(e.Item.ItemType=ListItemType.Item或e.Item.ItemType=ListItemType.AlternatingItem),则
Dim data As Date=Date.ParseExact(txtData.Text,“dd/MM/yyyy”,CultureInfo.CreateSpecificCulture(“en-US”)).Date
Dim attivita=dbVulcano.attivita.Where(函数(a)a.Completato=False和(a.IDUtente=-1或a.IDUtente=ddlTec.SelectedValue)和(a.datanizio.HasValue=False或a.datanizio data)和(a.inCorso=False或a.inCorso.HasValue=False))
对于阿提维塔的每个att
作为HtmlGenericControl=TryCast的Dim div(例如,Item.FindControl(att.ID),HtmlGenericControl)

如果att.datainization我建议在aspx端执行此操作,以获得更简单的解决方案。另外,我总是建议使用css类进行格式化

以下是一个例子:

Css:


.任务{
背景色:#faebd7;
}
.task.task--pass{
背景色:#ff0000;
}
中继器:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div class="<%#If(CType(Container.DataItem, (Add your namespace here).MyClass).DataInizio <= Date.Today, "task task--past", "task") %>">
            This is content
        </div>
    </ItemTemplate>
</asp:Repeater> 

这就是内容

好的,多亏了这里的一些提示和一些谷歌搜索,我使用了这个适合我的解决方案:

class='<%# IIf(Eval("datainizio").ToString() IsNot DBNull.Value, IIf(String.Format("{0:dd/MM/yyyy}", Eval("datainizio")) <= String.Format("{0:dd/MM/yyyy}", Date.Today), "coloreAttivitaScad", "coloreAttivitaOk"), "coloreAttivitaOk") %>' 

class='如果我还记得right-FindControl查找服务器端控件。您的div不是服务器端而是客户端。然而,我不确定我是否会这样做,但您可以尝试将runat=server放在您的div上,使它们也成为服务器端。Allan是正确的,您可以将runat=“server”添加到此div,然后在服务器端找到它。但是,在创建div时,只向中继器内的div添加一个css类(基于Container.DataItem.dataInization)会容易得多吗?如果我设置runat=“server”,那么我就不能再使用id=”,它会返回一个解析器error@Esko你能说得更具体些吗?基本上,我需要将过期活动的div变为红色,所以我必须检查datanization<今天。数据绑定occour直接来自aspx,后面没有数据绑定代码,因此上述逻辑应该在aspx中完成。怎么做?这种情况下的名称空间是什么?我像这样尝试过
<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div class="<%#If(CType(Container.DataItem, (Add your namespace here).MyClass).DataInizio <= Date.Today, "task task--past", "task") %>">
            This is content
        </div>
    </ItemTemplate>
</asp:Repeater> 
class='<%# IIf(Eval("datainizio").ToString() IsNot DBNull.Value, IIf(String.Format("{0:dd/MM/yyyy}", Eval("datainizio")) <= String.Format("{0:dd/MM/yyyy}", Date.Today), "coloreAttivitaScad", "coloreAttivitaOk"), "coloreAttivitaOk") %>'