سؤال

كيف يمكنني تنسيق البيانات الواردة من عبارة 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"]) %>

والمعلمة شكل هو قيمة سلسلة، وذلك باستخدام قيمة الاستبدال نائب جملة (وتسمى تنسيق مركب) مثل هذا:

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

وهذا هو التحكم قالب "وحدة التقييم" التي تأخذ في التعبير وتنسيق سلسلة:

protected internal string Eval(
string expression,
string format

)

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

ويمكنك استخدام وظيفة في مكرر قال مثلك، ولكن لاحظ أن DataBinder.Eval بإرجاع كائن وعليك أن يلقي ذلك إلى التاريخ والوقت.

ويمكنك أيضا تهيئة مضمنة مجال عملك:

<%# ((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")%>

كيفية تنسيق بيانا حدة التقييم لعرض تاريخ التسجيل باستخدام لغة

وشكرا للجميع. كنت قد علقت على سلاسل التنسيق القياسية لبعض الوقت. أود أيضا أن تستخدم وظيفة مخصصة في 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

ونص = '<٪ # DateTime.Parse (. EVAL ( "LastLoginDate") ToString ()) ToString ( "MM / يوم / سنة ح ح: مم ترينيداد وتوباغو").٪>'

وهذا يعمل لتنسيق ما تريد

<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