.NET 1.0Windows 2003.NET 1.1Windows 2000Windows XP中级开发Visual StudioJavascriptWindows.NETVisual BasicASP.NET
创建自定义 Web 控件






1.28/5 (10投票s)
2004 年 4 月 14 日
1分钟阅读

84215

1498
本文档解释了如何扩展标准 Web 控件的基本功能。
引言
本文档解释并说明了如何扩展 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