服务器控件的学习-处理回发数据


要使控件能够检查客户端发回的窗体数据,控件必须实现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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值