Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

default.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;
    }
}

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

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

<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

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

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

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

Для форматирования даты с использованием локального формата даты используйте:

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

Как отформатировать заявление Eval отображать дату с использованием локали даты

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

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

Это работает для нужного формата

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

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

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top