هل تريد إضافة CalendarExtender ديناميكيًا إلى التحكم في خادم فئة فرعية Textbox؟

StackOverflow https://stackoverflow.com/questions/83770

سؤال

أحاول إنشاء عنصر تحكم في الخادم، والذي يرث من TextBox، والذي سيكون له تلقائيًا CalendarExtender أضفها له.هل من الممكن القيام بذلك، أم أن عنصر التحكم الجديد الخاص بي يحتاج إلى أن يرث من CompositeControl بدلاً من ذلك؟لقد قمت بتجريب الخيار الأول، لكنني لست واضحًا في أي جزء من دورة حياة التحكم يجب أن أقوم بإنشاء المثيل الجديد لـ CalendarExtender، وما هي مجموعة عناصر التحكم التي يجب أن أضيفها إليها.لا يبدو أنني قادر على إضافتها إلى مجموعة عناصر التحكم الخاصة بالصفحة أو النموذج، وإذا أضفتها إلى مجموعة عنصر التحكم (TextBox)، فلن أحصل على أي من وظائف التقويم المنبثق.

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

المحلول

لقد أنجزت هذا في مشروع منذ فترة.للقيام بذلك قمت بإنشاء CompositeControl الذي يحتوي على كل من TextBox وCalendarExtender.

في ال CreateChildControls طريقة CompositeControl أستخدم رمزًا مشابهًا لهذا:

TextBox textbox = new TextBox();
textbox.ID = this.ID + "Textbox";
textbox.Text = this.EditableField.TextValue;
textbox.TextChanged += new EventHandler(HandleTextboxTextChanged);
textbox.Width = new Unit(100, UnitType.Pixel);
CalendarExtender calExender = new CalendarExtender();
calExender.PopupButtonID = "Image1";
calExender.TargetControlID = textbox.ID;
this.Controls.Add(textbox);
this.Controls.Add(calExender);

بالطبع تأكد من أن النموذج الذي يحتوي على CompositeControl هذا يحتوي على مدير البرامج النصية لمجموعة الأدوات.

نصائح أخرى

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

Imports System.Web.UI.WebControls
Imports AjaxControlToolkit

Public Class DateTextBox
    Inherits TextBox

    Private _dateValidator As CompareValidator
    Private _calendarExtender As CalendarExtender

    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        MyBase.OnInit(e)

        _dateValidator = New CompareValidator
        With _dateValidator
            .ControlToValidate = ID
            Rem set your other properties
        End With
        Controls.Add(_dateValidator)

        _calendarExtender = New CalendarExtender
        With _calendarExtender
            .TargetControlID = ID
        End With
        Controls.Add(_calendarExtender)
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        MyBase.Render(writer)
        _dateValidator.RenderControl(writer)
        _calendarExtender.RenderControl(writer)
    End Sub
End Class

يمكنك بسهولة إضافة تقويم اياكس في عناصر تحكم الخادم المخصصة.تحتاج إلى إضافة مرجعين في طلبك.1.ajaxcontroltoolkit.dll 2.System.Web.Extensions بمساعدة المرجع الثاني ، سنحصل على جميع خاصية "CalendArextender" في عناصر التحكم في الخادم المخصصة.

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

وذلك لأنه لا يتم نشر عناصر التحكم للقراءة فقط مرة أخرى إلى الخادم.الحل البديل لهذا هو ما يلي:

Page_Load باطلة محمية (مرسل الكائن، EventArgs e)

{

TextBox1.Attributes.Add("readonly", "readonly");

}

نأمل أن يساعد.

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