Подтвердить что ты не робот

Форматирование данных DataBinder.Eval

Как я могу форматировать данные, поступающие из инструкции DataBinder.Eval на странице ASPX?

Например, я хочу отобразить опубликованную дату новостей в определенном формате на главной странице. Я использую элемент управления ретранслятора ASP.NET 2.0 для отображения списка новостей.

Код для этого выглядит следующим образом:

<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? Я опробовал код за страницей, но получил ошибку времени выполнения? Если это невозможно, существует ли способ сделать встроенное форматирование?

4b9b3361

Ответ 1

Существует необязательная перегрузка для DataBinder.Eval для форматирования:

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

Параметр формата представляет собой значение String, используя синтаксис замены замещающего значения (называемый составным форматированием) следующим образом:

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

Ответ 2

После некоторого поиска в Интернете я обнаружил, что на самом деле очень возможно вызвать пользовательский метод, передающий значение DataBinder.Eval.

Пользовательский метод может быть записан в код за файлом, но должен быть объявлен общедоступным или защищенным. В моем вопросе выше я упомянул, что пытался написать собственный метод в коде, но получал ошибку времени выполнения. Причиной этого было то, что я объявил, что метод частный.

Итак, в целом, это хороший способ использовать значение DataBinder.Eval для получения желаемого результата:

default.aspx

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

default.aspx.cs code:

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

    protected string GetDateInHomepageFormat(DateTime d)
    {

        string retValue = "";

        // Do all processing required and return value

        return retValue;
    }
}

Надеюсь, это тоже поможет другим.

Ответ 3

Почему бы не использовать более простой синтаксис?

<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

Ответ 4

Вы можете использовать функцию в повторителе, как вы сказали, но обратите внимание, что DataBinder.Eval возвращает объект, и вы должны отдать его в DateTime.

Вы также можете форматировать свое поле inline:

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

Если вы используете ASP.NET 2.0 или новее, вы можете написать это, как показано ниже:

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

Другой вариант - привязать значение к метке в событии OnItemDataBound.

Ответ 5

Эта строка решила мою проблему:

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>

Ответ 7

Спасибо всем. Я некоторое время застрял в стандартном формате. Я также использовал пользовательскую функцию в 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

Ответ 8

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

Это работает для формата, как вы хотите

Ответ 9

<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>

Ответ 10

Вы можете использовать его таким образом на странице aspx

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>