Domanda

Sto cercando di creare un controllo server, che eredita da TextBox, che avrà automaticamente un file CalendarExtender ad esso allegato.È possibile farlo o il mio nuovo controllo deve invece ereditare da CompositeControl?Ho provato il primo, ma non sono chiaro durante quale parte del ciclo di vita del controllo dovrei creare la nuova istanza di CalendarExtender e a quale raccolta di controlli dovrei aggiungerla.Non riesco ad aggiungerlo alla raccolta di controlli della pagina o del modulo e, se lo aggiungo alla raccolta di controlli (TextBox), non ottengo alcuna funzionalità del calendario popup.

È stato utile?

Soluzione

L'ho realizzato in un progetto qualche tempo fa.Per farlo ho creato un CompositeControl che contiene sia il TextBox che il CalendarExtender.

Nel CreateChildControls metodo del CompositeControl utilizzo un codice simile a questo:

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);

Ovviamente assicurati che il modulo contenente questo CompositeControl abbia un gestore di script del toolkit.

Altri suggerimenti

So che questo è un vecchio thread, ma mi sono imbattuto in esso quando avevo una domanda simile.Questo è ciò che ho finito per implementare e funziona benissimo.Se vuoi che il controllo sia un TextBox, pompa semplicemente l'extender durante la chiamata 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

Puoi aggiungere facilmente il calendario Ajax nei controlli server personalizzati.È necessario aggiungere due riferimenti nella tua domanda.1.Ajaxcontrotoolkit.dll 2.System.Web.Extensions Con l'aiuto del secondo riferimento otterremo tutta la proprietà di "CalendarStender" nei controlli del server personalizzati.

Quando provi a non consentire agli utenti di digitare nulla nella casella di testo, ma di essere riempito solo dall'estensione del calendario e poi provi a ottenere la data selezionata dal controllo della casella di testo, potrebbe essere una stringa vuota se hai impostato la proprietà della casella di testo su Sola lettura ="Vero".

È perché i controlli di sola lettura NON vengono inviati al server.La soluzione alternativa a questo problema è la seguente:

protetto void Page_Load(mittente oggetto, EventArgs e)

{

TextBox1.Attributes.Add("sola lettura", "sola lettura");

}

Spero che sia d'aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top