30

如何格式化来自 ASPX 页面中的 DataBinder.Eval 语句的数据?

例如,我想在主页中以特定格式显示新闻的发布日期。我正在使用 ASP.NET 2.0 Repeater 控件来显示新闻项目列表。

代码如下:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<HeaderTemplate><table cellpadding="0" cellspacing="0" width="255"></HeaderTemplate>
<ItemTemplate>
    <tr><td >
            <a href='/content/latestNews.aspx?id=<%#DataBinder.Eval(Container.DataItem, "id") %>'>
                <asp:Label ID="lblNewsTitle" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "title") %>'></asp:Label>
            </a>
    </td></tr>
    <tr><td>
           <asp:Label ID="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate"))%>'></asp:Label>
    </td></tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate></asp:Repeater>

有没有一种方法可以调用以 DataBinder.Eval 值为参数的自定义方法(如下所示)?

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>

如果是,那么我在哪里编写 GetDateInHomepageFormat 方法?我在页面后面的代码中进行了尝试,但出现了运行时错误?如果这是不可能的,有没有办法进行内联格式化?

4

10 回答 10

59

DataBinder.Eval 有一个可选的重载来提供格式:

<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>

格式参数是一个字符串值,使用值占位符替换语法(称为复合格式),如下所示:

<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>
于 2008-11-08T21:17:52.827 回答
14

在网上搜索了一番后,我发现调用自定义方法传递 DataBinder.Eval 值实际上是非常有可能的。

自定义方法可以写在代码隐藏文件中,但必须声明为publicprotected。在我上面的问题中,我曾提到我试图在后面的代码中编写自定义方法,但遇到了运行时错误。这样做的原因是我已将方法声明为private

因此,总而言之,以下是使用 DataBinder.Eval 值来获得所需输出的好方法:

默认.aspx

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>

default.aspx.cs 代码:

public partial class _Default : System.Web.UI.Page
{

    protected string GetDateInHomepageFormat(DateTime d)
    {

        string retValue = "";

        // Do all processing required and return value

        return retValue;
    }
}

希望这对其他人也有帮助。

于 2008-11-09T11:05:27.663 回答
12

为什么不使用更简单的语法?

<asp:Label id="lblNewsDate" runat="server" Text='<%# Eval("publishedDate", "{0:dddd d MMMM}") %>'</label>

这是接受表达式和字符串格式的模板控件“Eval”:

protected internal string Eval(
string expression,
string format

)

http://msdn.microsoft.com/en-us/library/3d2sz789.aspx

于 2011-05-17T05:57:35.100 回答
11

您可以像您说的那样在转发器中使用函数,但请注意 DataBinder.Eval 返回一个对象,您必须将其转换为 DateTime。

您还可以格式化您的字段内联:

<%# ((DateTime)DataBinder.Eval(Container.DataItem,"publishedDate")).ToString("yyyy-MMM-dd") %>

如果您使用 ASP.NET 2.0 或更高版本,您可以编写如下:

<%# ((DateTime)Eval("publishedDate")).ToString("yyyy-MMM-dd") %>

另一种选择是在 OnItemDataBound 事件中将值绑定到标签。

于 2008-11-08T22:38:56.830 回答
3

这一行解决了我的问题:

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>
于 2009-07-31T09:15:10.223 回答
2

要使用本地日期格式格式化日期,请使用:

<%#((DateTime)Eval("ExpDate")).ToString("d")%>

如何使用日期区域设置格式化 Eval 语句以显示日期

于 2011-10-04T16:56:20.550 回答
1

谢谢大家。一段时间以来,我一直停留在标准格式字符串上。我还在 VB 中使用了自定义函数。

标记:-

<asp:Label ID="Label3" runat="server" text='<%# Formatlabel(DataBinder.Eval(Container.DataItem, "psWages1D")) %>'/>

背后的代码: -

Public Function fLabel(ByVal tval) As String
   fLabel = tval.ToString("#,##0.00%;(#,##0.00%);Zero")
End Function
于 2011-10-14T01:08:15.390 回答
1

文本='<%# DateTime.Parse(Eval("LastLoginDate").ToString()).ToString("MM/dd/yyyy hh:mm tt") %>'

这适用于您想要的格式

于 2014-10-27T05:31:33.983 回答
0
<asp:Label ID="ServiceBeginDate" runat="server" Text='<%# (DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:yyyy}") == "0001") ? "" : DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:MM/dd/yyyy}") %>'>
</asp:Label>
于 2009-09-17T14:07:19.450 回答
0

你可以在aspx页面中这样使用

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
于 2009-10-22T05:48:12.723 回答