格式化DataBinder.Eval数据

Nah*_*nam 29 asp.net formatting repeater databinder

如何格式化来自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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

DOK*_*DOK 57

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

<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>
Run Code Online (Sandbox Code Playgroud)

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

<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>
Run Code Online (Sandbox Code Playgroud)

  • 回复此处,因为Google今天的搜索结果仍然很高.请记住,使用Eval时会有性能损失(因为后期绑定).要格式化输出,我更喜欢将显式强制转换传递给函数,例如.<%#Format(((DeliveryDataType)Container.DataItem).DELeliDate,"dd.MM.yy")%> (3认同)
  • 很棒的答案...也值得为http://www.csharp-examples.net/string-format-datetime/添加DateTime的所有C#字符串格式的链接 (2认同)

Nah*_*nam 14

在Internet上进行一些搜索之后,我发现实际上很可能调用一个传递DataBinder.Eval值的自定义方法.

自定义方法可以写在代码隐藏文件中,但必须声明为publicprotected.在我上面的问题中,我曾提到过我尝试在后面的代码中编写自定义方法但是遇到了运行时错误.原因是我已经宣布该方法是私有的.

因此,总结以下是使用DataBinder.Eval值获取所需输出的好方法:

Default.aspx的

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Die*_* C. 12

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

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

这是模板控件"Eval",它接受表达式和字符串格式:

protected internal string Eval(
string expression,
string format
Run Code Online (Sandbox Code Playgroud)

)

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


dex*_*ter 11

你可以像你说的那样将函数用于转发器,但请注意DataBinder.Eval返回一个对象,你必须将它转换为DateTime.

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

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

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

<%# ((DateTime)Eval("publishedDate")).ToString("yyyy-MMM-dd") %>
Run Code Online (Sandbox Code Playgroud)

另一种选择是在OnItemDataBound事件中将值绑定到label.