هل تريد إضافة CalendarExtender ديناميكيًا إلى التحكم في خادم فئة فرعية Textbox؟
-
01-07-2019 - |
سؤال
أحاول إنشاء عنصر تحكم في الخادم، والذي يرث من 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");
}
نأمل أن يساعد.