سؤال

لدي مشكلة عند استخدام LoadControl( type, Params ).اسمحوا لي أن أشرح...

لدي سوبر بسيطة تحكم المستخدم (ascx)

<%@ Control Language="C#" AutoEventWireup="True" Inherits="ErrorDisplay" Codebehind="ErrorDisplay.ascx.cs" EnableViewState="false" %>

<asp:Label runat="server" ID="lblTitle" />
<asp:Label runat="server" ID="lblDescription" />

مع رمز ( c# ) خلف من:

public partial class ErrorDisplay : System.Web.UI.UserControl
{

    private Message _ErrorMessage;    

    public ErrorDisplay()
    {
    }

    public ErrorDisplay(Message ErrorMessage)
    {
        _ErrorMessage = ErrorMessage;
    }    

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if (_ErrorMessage != null)
        {
            lblTitle.Text = _ErrorMessage.Message;
            lblDescription.Text = _ErrorMessage.Description;
        }
    }
}

في أماكن أخرى في تطبيق ويب أنا مضيفا مثيل usercontrol إلى الصفحة باستخدام التعليمات البرمجية التالية:

divValidationIssues.Controls.Add(LoadControl(typeof(ErrorDisplay), new object[] { MessageDetails }));   

أنا باستخدام طاقتها نسخة من LoadControl لأنني أريد أن أوصل الرسالة المعلمة إلى المنشئ.كل هذا يظهر العمل موافق.

ومع ذلك ، عندما OnPreRender() أطلق على ErrorDisplay usercontrol على lblTitle و lblDescription المتغيرات على حد سواء null, رغم أن العلامات ما يعادلها.الرسالة متغير بشكل صحيح بالسكان.

يمكن لأي شخص أن يلقي أي ضوء على لماذا هذا قد يحدث ؟

شكرا

تحرير:

فقط للتوضيح أنا أيضا إضافة هذا الرمز الذي هو برمجيا إضافة usercontrol إلى الصفحة يعمل ردا على زر الصحافة ، حتى 'استضافة صفحة' قد تقدم من خلال الحرف الأول ، Page_Load و هو الآن تجهيز معالجات الأحداث.

لا أستطيع إضافة usercontrols في وقت سابق asp دورة حياة المسرح كما أنها يتم إنشاؤها ردا على زر انقر فوق الحدث.

هل كانت مفيدة؟

المحلول

لقد حاولت البرمجية التالية وكذلك - والتي ينتج نفس النتيجة (أيكل lblTitle و lblDescription null)

protected void Page_Load(object sender, EventArgs e)
{
    if (_ErrorMessage != null)
    {
        lblTitle.Text = _ErrorMessage.Message;
        lblDescription.Text = _ErrorMessage.Description;
    }
}

كان مفهوما أن LoadControl وظيفة جلب التحكم يتم تحميل ما يصل إلى الحالي 'الدولة' من صفحة على التي في.ومن ثم الحرف الأول ، Page_Load الخ كلها تشغيل كجزء من LoadControl الاتصال.

ومن المثير للاهتمام هذا (إجابة) asp.net منتديات آخر يسلك نفس المشكلة وأنا تعاني.

منتديات MSDN بعد

بالإضافة إلى ذلك - من MSDN:

عند تحميل التحكم في مراقبة الحاويات, حاوية يثير كل من أضاف السيطرة على الأحداث حتى وصلت إلى الأحداث الحالية.ومع ذلك ، فإن إضافة عنصر التحكم لا اللحاق إعادة النشر معالجة البيانات.إضافة عنصر التحكم إلى المشاركة في إعادة النشر معالجة البيانات ، بما في ذلك التحقق من صحة التحكم يجب أن تضاف في الحدث التهيئة وليس في الحدث Load.

ولذلك يجب أن لا LoadControl initalise بشكل صحيح التحكم ؟

تحرير:

حسنا ، أنا الإجابة على سؤالي هنا ..

لقد وجدت الإجابة نسخة من منتدى آخر أنا مرتبطة أعلاه هنا

أساسا الجواب هو أن LoadControl( type, params ) لا يمكن الاستدلال على صفحة 'امام' ascx تحليل ومن ثم لا يكلف نفسه عناء initalising أي من الضوابط.عند استخدام LoadControl( "ascx path" ) الإصدار نظرا الصفحة امام وبالتالي لا تحليل و initalision.

لذلك باختصار أنا بحاجة إلى تغيير رمز وهو initalising التحكم و تقسيمه إلى أجزاء منفصلة.أولا-هاء.

Control ErrorCntrl = LoadControl("ErrorDisplay.ascx");
ErrorCntrl.ID = SomeID;
(ErrorCntrl as ErrorDisplay).SetErrorMessage = MessageDetail;
divErrorContainer.Controls.Add(ErrorCntrl);

وينبغي أن تعمل على ما يرام..أنها ليست نظيفة كما بلدي محاولة سابقة, ولكن على الأقل أنه سوف يعمل.

أنا لا تزال مفتوحة اقتراحات لتحسين أعلاه.

هتافات

نصائح أخرى

الاتفاق مع ميتشل ، يجب أن تكون قادرة على وضع page_load في السيطرة القانون نفسه والتي من شأنها أن النار بعد الضوابط تماما المتاحة.

حسنا هناك دائما إضافة الخاصة بك تحميل الحدث واصفا إياه بعد أن كنت قد ركض منشئ وأضاف السيطرة على الصفحة ، ولكن ليس مختلف كثيرا عن ما لديك ، على الرغم من أنني يمكن اختيار نمط الأسباب.

سعيد لأنك وجدت إجابة لمشكلتك!

هنا هو بلوق وظيفة كتبه ستيفن روبنز.آخر يشرح كيفية تمرير المعلمات للمستخدم التحكم باستخدام LoadControl, ، على غرار ما LoadControl(Type, object[]) لن يفعل ، إلا أنه يعمل :)

كان لي مشكلة مشابهة مع عنصر تحكم التقويم DayRender الحدث في أن أردت إضافة عنصر تحكم المستخدم إلى هـ.الخليوي.ضوابط جمع.بعد محاولة اثنين من فشل النهج مع المستخدم التحكم page_load عدم إطلاق النار أو listbox على ascx رمي null استثناء, لقد وجدت أنه إذا لم يتم تهيئة سيطرتي على شكل مع LoadControl(ascx) ومن ثم البدء في الوصول إلى توصيف الضوابط على ascx, كل شيء سار على ما يرام.هذا النهج لا تعتمد على الحدث Page_Load على ascx على الإطلاق.

ASCX العلامات

التعليمات البرمجية خلف

الطبقة العامة CPCalendarCell يرث النظام.ويب.واجهة المستخدم.UserControl

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Public Sub Add(txt As String)
    Dim li As New ListItem(txt, txt)
    lstDay.Items.Add(li)
End Sub

End Class

صفحة ASPX العلامات

رمز وراء التقويم DayRender الحدث على شكل

Private Sub Calendar1_DayRender(sender As Object, e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar1.DayRender
    Dim div As CPCalendarCell = LoadControl("~/UserControls/CPCalendarCell.ascx")
    div.ID = "dv_" & e.Day.Date.ToShortDateString.Replace(" ", "_")

    **e.Cell.Controls.Add(div)**

    div.Add(e.Day.Date.Month.ToString & "/" & e.Day.Date.Day.ToString)
    div.Add("Item 1")
    div.Add("Item 2")
    e.Cell.Style.Add("background-color", IIf(e.Day.IsWeekend, "whitesmoke", "white").ToString)
End Sub

في asp.net صفحة حياة عناصر التحكم الخاصة بك بالكامل وأضاف في مرحلة ما قبل تقديم لماذا لا يمكنك فقط تحميل القيم في page_load?

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