كيف أفعل منطقًا مشروطًا ضمن عنصر تحكم ASP.NET DataRepeater؟
-
27-09-2019 - |
سؤال
أنا أربط عنصر تحكم DataRepeater الخاص بي بجدول يحتوي على العديد من الأعمدة. أرغب في عرض مجموعة فرعية من هؤلاء فقط ، اعتمادًا على ما يتم ملؤه.
كيف/أين يجب أن أجري اختبارات بلدي داخل dataRepeater؟ هذا هو الرمز في itemTemplate الخاص بي:
<% if (0= (DataBinder.Eval(Container.DataItem, "first").ToString().Length))
{
i++;
}
%>
الخطأ الذي أحصل عليه هو: CS0103: اسم "الحاوية" غير موجود في السياق الحالي
المحلول
يجب أن تكون بخير مع هذا:
<% if (0 == (Eval("first").ToString().Length))
{
i++;
}
%>
ولكن بناءً على ما تريد القيام به ، ربما أكتب وظيفة للتعامل مع ربط البيانات من أجل الاحتفاظ بالفصل بين العرض والمنطق التجاري.
على سبيل المثال
في ASPX الخاص بك:
<asp:Repeater id="myRepeater" runat="server" onDataItemBound="FillInRepeater">
<ItemTemplate>
<div class="contactLarge">
<div style="background-color:#C5CED8;clear:both"><asp:Label runat="server" ID="title"></asp:Label>
.
.
.
</div>
</ItemTemplate>
<AlternatingItemTemplate>
</AlternatingItemTemplate>
</asp:Repeater>
في الكود الخاص بك:
protected void FillInRepeater(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//in here you bind to your repeater labels and stuff then do all that sorta logic.
//Grab Primary Data
string titleText = DataBinder.Eval(e.Item.DataItem, "title").ToString();
string somethingElseText = DataBinder.Eval(e.Item.DataItem, "somethingElse").ToString();
string maybeSeeMaybeDontText = DataBinder.Eval(e.Item.DataItem, "maybeSeeMaybeDont").ToString();
//Find the controls and populate them according the to row
Label titleLabel = (Label)e.Item.FindControl("title");
Label somethingElseLabel = (Label)e.Item.FindControl("somethingElse");
Label maybeSeeMaybeDontLabel = (Label)e.Item.FindControl("maybeSeeMaybeDont");
// display the fields you want to
titleLabel.Text = titleText;
somethingElseLabel.Text = somethingElseText;
// here is where you could do some of your conditional logic
if (titleText.Length != 0 && somethingElseText.Length != 0)
{
maybeSeeMaybeDontLabel.Text = maybeSeeMaybeDontText;
}
}
}
أنا شخصياً أفضل القيام بالأشياء بهذه الطريقة بدلاً من القيام بأي منطق داخل ASP. أعلم أنه قد يبدو سخيفًا بعض الشيء بالنسبة لبعض الأشخاص ، لكني أحب أن أبقي منطق عملي منفصلاً عن منطق العرض الخاص بي في أي مكان ممكن.
لا تنتمي إلى StackOverflow