我正在尝试创建一个服务器控件,它继承自 TextBox,它将自动具有 日历扩展器 附于其上。是否可以这样做,或者我的新控件是否需要从 CompositeControl 继承?我已经尝试过前者,但我不清楚应该在控件生命周期的哪一部分创建 CalendarExtender 的新实例,以及应该将其添加到哪个控件集合中。我似乎无法将其添加到页面或表单的控件集合中,如果我将其添加到 (TextBox) 控件的集合中,我将无法获得任何弹出日历功能。

有帮助吗?

解决方案

我不久前在一个项目中完成了这一点。为此,我创建了一个包含 TextBox 和 CalendarExtender 的 CompositeControl。

在里面 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

您可以轻松地在自定义服务器控件中添加 ajax 日历。您需要在您的应用程序中添加两个参考。1.ajaxcontroltoolkit.dll 2。system.web.extensions借助第二个参考,我们将在您的自定义服务器控件中获得“ calendarextender”的所有属性。

当您尝试不允许用户在文本框中键入任何内容,而仅由日历扩展器填充,然后尝试从文本框控件获取所选日期时,如果您已将文本框属性设置为只读,则它可能是空字符串=“真实”。

这是因为只读控件不会发布回服务器。解决方法如下:

protected void Page_Load(对象发送者,EventArgs e)

{

TextBox1.Attributes.Add("只读", "只读");

}

希望能帮助到你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top