هل يمكنني ملء قائمة العناصر في قائمة ASP.NET المنسدلة من ASP.NET Hold؟
-
22-09-2019 - |
سؤال
أقوم بتصميم جهاز التحكم المخصص الخاص بي الذي يحتوي على قائمة DropdownList .NET. ما أتساءل هو ما إذا كان من الممكن ملء قائمة المنسدلة الخاصة بي مع وضع ListItems في عنصر نائب؟
علي سبيل المثال:
<asp:DropDownList ID="ddlFilter" runat="server" >
<asp:PlaceHolder ID="ListItemPlaceholder" runat="server"/>
</asp:DropDownList>
هذا لا يعمل لأن التحكم في القائمة المنسدلة يسمح فقط ListItems كعناصر تحكم للأطفال. لكني أريد أن أفعل شيئًا مشابهًا لهذا الأمر ، لذلك عندما يتضمن المستخدم تحكمي على الصفحة ، يمكنهم فعل شيء مثل هذا:
<mytag:MyControl Mode="DropDown" runat="server">
<ListItemTemplate>
<asp:ListItem Text="C" Value="c"></asp:ListItem>
<asp:ListItem Text="E" Value="e"></asp:ListItem>
<asp:ListItem Text="B" Value="b"></asp:ListItem>
</ListItemTemplate>
</myTag:MyControl>
أي اقتراحات أو أفكار؟ أعلم أنه يمكنني القيام بذلك عن طريق إضافة ListItems ديناميكيًا في رمز الصفحة وراءه ، لكنني أود تجنب ذلك إن أمكن. شكرًا!
المحلول
طريقة واحدة لهذا هو إعطاء سيطرتك أ [ParseChildren(true, "ListItemTemplate")]
ينسب.
إذا كان لديك خاصية تسمى "ListItemTemplate
"، التي كانت مجموعة من ListItems
, ، سيتم تحليل ترميزك في تلك الخاصية. في وقت التشغيل في سيطرتك ، يمكنك ببساطة تسليم قائمة القائمة المنسدلة الخاصة بك.
رمز مثال غير اختبار:
[ParseChildren(true, "ListItemTemplate")]
public class MyControl: Control
{
private ArrayList employees = new ArrayList();
private DropDownList myDropDownList = new DropDownList();
public ArrayList ListItemTemplate
{
get
{
return employees;
}
}
protected override void CreateChildControls()
{
myDropDownList.Items.AddRange(ListItemTemplate):
Controls.Add(myDropDownList);
}
}