从中继器解析值

本文关键字:中继器 | 更新日期: 2023-09-27 17:53:57

<asp:Repeater ID="repeater" runat="server" OnItemDataBound="repeater_ItemDataBound">
<HeaderTemplate>
    <ul class="sf_newsList">
</HeaderTemplate>
<ItemTemplate>  
<asp:Literal ID="Publication_Date" runat="server" Text="{0}" />
...

好的,所以我有一个从源返回的日期,我需要将该日期剥离为当前的日和月就像"2012年3月12日"。

一旦被解析成日期和月份字符串,我想把它传递回

<asp:Literal ID="Publication_Day" runat="server" Text="{0}" />

现在我尝试了一些东西,比如

protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    string newsdate = "";
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==  ListItemType.AlternatingItem)
    {
        Literal ltDate = (Literal)e.Item.FindControl("Publication_Date");
        newsdate = ltDate.Text;
        //do parse code
        Literal ltDay = (Literal)e.Item.FindControl("Publication_Day");
        ltDay.Text = newsdate;
    }       
}

但是当我遍历publication_date时,只返回{0}作为字符串而不是日期。

我知道源代码是好的,如果我把日期放在模板上,它就会显示在前端。

你知道我做错了什么吗?

从中继器解析值

返回{0},因为它位于Literal的Text属性上。

您可以使用DataBinder.Evale.Item.DateItem读取数据源的列。既然您知道要读取的列是什么,那么您可以直接从数据源获取DateTime对象,例如:

// get the dateTime from datasource
DateTime datePublication = DateTime.Parse(DataBinder.Eval(e.Item.DataItem, "DatePublicationColumn").ToString());
// show the day name
ltDay.Text = datePublication.ToString("dddd");

当我添加DatePublicationColumn时,您指定列。