كيفية تنفيذ LayoutTemplate مع عنصر نائب
-
30-09-2019 - |
سؤال
في التحكم في الخادم الخاص بي ، أود تنفيذ شيء مشابه لـ ListView
:
<asp:ListView runat="server">
<LayoutTemplate>
<asp:PlaceHolder runat="server" id="itemPlaceholder" />
</LayoutTemplate>
</asp:ListView>
لقد أنشأت ITemplate
الخاصية ، يمكنني ضبط التصميم في صفحة ASPX ، وأنا أفعل ITemplate.InstantiateIn(myControl)
.
لكن لا يمكنني معرفة كيفية إدراج عناصر التحكم في العنصر النائب. أظن أنه سيكون شيئًا مثل MyTemplate.FindControl("itemPlaceholder").Controls.Add(myControl)
. حاولت التلميح إلى نوع بلدي ITemplate
, ، لكنني أحصل على الخطأ:
Unable to cast object of type 'System.Web.UI.CompiledTemplateBuilder' to type 'MyNamespace.MyLayoutTemplate'
ماذا ينقصني؟
يحرر: لقد وجدت هذا للتو: http://www.nikhilk.net/singleinstancetemplates.aspx Control developers can define templates to be single instance using metadata which causes the ID'd controls within the template contents to be promoted to the page level... The parser and code-generator together work behind the scenes to add member fields, and initialize them at the right time.
. يبدو أنه فقط لعناصر تحكم المستخدم؟ حاولت Page.FindControl()
بعد القيام بذلك لكنه لم يجد أي شيء.
المحلول
حسنًا ، كانت هذه ببساطة مسألة خطأ المستخدم. لقد قمت بتثبيت ITemplate
في Panel
, ، من الواضح Page.FindControl()
(وهو غير متكرر) لن يعمل. مرة واحدة فعلت Panel.FindControl()
, ، كل شيء نجح.
نصائح أخرى
في الماضي ، استخدمت هذه المكتبة مع النجاحhttp://www.denisbauer.com/aspnetcontrols/dynamicControlSplaceholder.aspx