سؤال

في التحكم في الخادم الخاص بي ، أود تنفيذ شيء مشابه لـ 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top