要使控件能够检查客户端发回的窗体数据,控件必须实现system.web.ui.IPostBackDataHandler接口
public Interface IPostBackDataHandler
public function LoadPostBackData(postDataKey as string,postCollection as NameValueCollection) as boolean
public sub RainsPostDataChangedEvent()
end Interface
回发后,
页框架在发送的内容中搜索与实现 IPostBackDataHandler 的服务器控件的 UniqueID 匹配的值。
然后,页框架按顺序在每个实现该接口的控件上调用 LoadPostData。
LoadPostData 的两个参数是:
标识控件的关键字以及包含发送数据的集合 NameValueCollection。
通常实现 LoadPostData,以便在回发后更新控件的状态。
如果控件状态因回发而更改,则 LoadPostData 返回 true;否则返回 false。
页框架跟踪所有返回 true 的控件并在这些控件上调用 RaisePostDataChangedEvent。
更改事件(如果有)就是从该方法引发的。
因此,回发数据处理分两个阶段进行,
即更新状态和引发更改通知。
这可防止在加载回发数据过程中引发更改通知,
在该过程中,更改通知可能在各控件加载回发数据之前错误地修改状态。
HtmlTextWriterAttribute是一个枚举类型,用于将指定属性写入HTML元素的开始标记,比如标记的name,bgcolor,onclick,href等等
HtmlTextWriterTag枚举:向HtmlTextWriter或Html32TextWriter对象输出流的HTML标记,如IMg,a,td,tr,input等
用法如下
writer.AddAttribute(HtmlTextWriterAttribute.Alt, "Encoding, ""Required""", True)
writer.AddAttribute("myattribute", "No "encoding " required", False)
writer.RenderBeginTag(HtmlTextWriterTag.Img)
writer.RenderEndTag()
writer.WriteLine()
完整代码如下:
Option Explicit
Option Strict
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Collections.Specialized
Namespace CustomControls
Public Class MyTextBox
Inherits Control
Implements IPostBackDataHandler
Public Property Text() As String
Get
Return CType(ViewState("Text"), String)
End Get
Set
ViewState("Text") = value
End Set
End Property
Public Event TextChanged As EventHandler
Public Overridable Function LoadPostData(postDataKey As String, values As NameValueCollection) As Boolean Implements IPostBackDataHandler.LoadPostData
Dim presentValue As String = Text
Dim postedValue As String = values(postDataKey)
If Not presentValue.Equals(postedValue) Then
Text = postedValue
Return True
End If
Return False
End Function
Public Overridable Sub RaisePostDataChangedEvent() Implements IPostBackDataHandler.RaisePostDataChangedEvent
OnTextChanged(EventArgs.Empty)
End Sub
Protected Overridable Sub OnTextChanged(e As EventArgs)
RaiseEvent TextChanged(Me, e)
End Sub
Protected Overrides Sub Render(output As HtmlTextWriter)
output.AddAttribute(HtmlTextWriterAttribute.Type, "text")
output.AddAttribute(HtmlTextWriterAttribute.Value, me.Text)
output.AddAttribute(HtmlTextWriterAttribute.Name, me.UniqueID)
output.RenderBeginTag(HtmlTextWriterTag.Input)
output.RenderEndTag()
End Sub
End Class
End Namespace