asp.net - net - radtextbox
¿Agregar dinámicamente CalendarExtender al control del servidor de la subclase TextBox? (4)
Estoy intentando crear un control de servidor, que hereda de TextBox, que automáticamente tendrá un CalendarExtender conectado. ¿Es posible hacer esto o mi nuevo control necesita heredarse de CompositeControl? Intenté con el primero, pero no tengo claro durante qué parte del ciclo de vida de control debería crear la nueva instancia de CalendarExtender, y a qué colección de controles debería añadirlo. Parece que no puedo agregarlo a la colección de controles de página o formulario, y si lo agrego a la colección del control (TextBox), no recibo ninguna de las funciones del calendario emergente.
Lo logré en un proyecto hace un tiempo. Para hacerlo, creé un CompositeControl que contiene tanto el TextBox como el CalendarExtender.
En el método CreateChildControls
de CompositeControl utilizo un código similar a este:
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);
Por supuesto, asegúrese de que el formulario que contiene este CompositeControl tenga un gestor de script de kit de herramientas.
Sé que este es un hilo viejo, pero lo encontré cuando tuve una pregunta similar. Esto es lo que terminé implementando, y funciona genial. Si desea que el control sea un TextBox, simplemente bombee el extensor durante la llamada a 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
Puede agregar fácilmente el calendario ajax en los controles de servidor personalizados. Necesita agregar dos referencias en su aplicación. 1. AjaxControlToolkit.dll 2. System.Web.Extensions Con la ayuda de la segunda referencia, obtendremos todas las propiedades de "CalendarExtender" en los controles de servidor personalizados.
Cuando intenta no permitir que los usuarios escriban nada en el cuadro de texto, pero solo se completan con el extensor de calendario y luego intenta obtener la fecha seleccionada del control del cuadro de texto, puede ser una cadena vacía si ha configurado la propiedad del cuadro de texto en ReadOnly = "Verdadero"
Es porque los controles de solo lectura NO se publican en el servidor. La solución para esto es lo siguiente:
vacío protegido Page_Load (remitente del objeto, EventArgs e)
{
TextBox1.Attributes.Add ("readonly", "readonly");
}
Espero eso ayude.