65.9K
CodeProject 正在变化。 阅读更多。
Home

创建自定义 Web 控件

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.28/5 (10投票s)

2004 年 4 月 14 日

1分钟阅读

viewsIcon

84215

downloadIcon

1498

本文档解释了如何扩展标准 Web 控件的基本功能。

Sample screenshot

引言

本文档解释并说明了如何扩展 Web 控件提供的标准功能,以适应个人或企业的要求。

背景

我当时正在一个项目中工作,该项目涉及将现有的 Power Builder 应用程序迁移到 .NET。我们自然而然地选择了 .NET 作为新平台,原因在于开发人员的可获得性以及企业整体向通用 Microsoft 平台的转变。我在现有的应用程序(客户端/服务器)中遇到了一种功能,用户双击文本框(日期字段),当前日期将被插入。为了复制此功能,我们需要在每个页面中编写一些 JavaScript 代码片段。然后我们认为这是一个痛苦的过程,因此我们决定开发一个控件来扩展现有文本框的功能。也可以使用用户控件来实现,但我们认为开发一个 Web 控件可能更有用,以便也可以在其他项目中使用它。

使用代码

下载源代码。下载的 zip 文件包含一个解决方案,其中包含控件和包含该控件的示例 aspx 页面的源代码。代码如下:

VenusDateTextBox.vb

Option Strict On

Imports System.ComponentModel
Imports System.Web.UI

<DEFAULTPROPERTY("Text"), VALIDATIONPROPERTY("Text"), 
    TOOLBOXDATA("<{0}:VenusDateTextBox runat=server>")> 
 Public Class VenusDateTextBox _
    Inherits System.Web.UI.WebControls.TextBox _
    Implements INamingContainer

#Region " Member Variables "

    Private Const DateIncludeScriptKey As String = "DateCurrentDateInsertScript"

    ' The script block that is rendered to insert the Private I Date.
    Private Const DateCurrentDateInsertScript As String = ControlChars.CrLf & _
    "<SCRIPT LANGUAGE=""JAVASCRIPT"">" & ControlChars.CrLf & _
    "<!--" & ControlChars.CrLf & _
    "function InsertCurrentDate(VenusDateControl)" & ControlChars.CrLf & _
    "   {" & ControlChars.CrLf & _
    "        var curDate = new Date();" & ControlChars.CrLf & _
    "        var formattedDate = curDate.getMonth() + '/'" & _
    " + curDate.getDate() + '/' + curDate.getFullYear();" _
    & ControlChars.CrLf & _
    "        document.all.item(VenusDateControl).value = formattedDate;" _
    & ControlChars.CrLf & _
    "    }" & ControlChars.CrLf & _
    "// -->" & ControlChars.CrLf & _
    "</SCRIPT>"

#End Region

#Region " Overrides "

    Protected Overrides Sub AddAttributesToRender(ByVal_
                 writer As System.Web.UI.HtmlTextWriter)
        MyBase.AddAttributesToRender(writer)
        writer.AddAttribute("ondblclick", _
           "InsertCurrentDate('" & ClientID & "');")
    End Sub

    Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
        MyBase.OnPreRender(e)
        RegisterVenusDateIncludeScript()
    End Sub

#End Region

#Region " Private Methods "

    Private Sub RegisterVenusDateIncludeScript()
        Dim location As String = Nothing
        If Not Page.IsClientScriptBlockRegistered(DateIncludeScriptKey) Then
            ' Create the client script block.
            Page.RegisterClientScriptBlock(DateIncludeScriptKey,_
                                DateCurrentDateInsertScript)
        End If
    End Sub

#End Region

End Class
© . All rights reserved.