先来做个实验:
新建一网页.拉入一个TextBox控件.双击它.则系统默认为其添加TextChanged事件的处理函数

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
Response.Write("<script language='javascript'>alert('" + TextBox1.Text + "');</script>");
}

接着又拉入一个Button控件
运行程序,在textbox中输入任意字符串,点击,button触使页面回发.
弹出:输入的内容
在textbox中输入与刚才相同的字符串,点击,button触使页面回发.
不弹出任何东西

textbox是怎么做到获取字符串的改变呢?
查看sdk
public class TextBox : WebControl, IPostBackDataHandler
就是IPostBackDataHandler提供了这个魔力.

接下来干什么呢?当然是我们自己也做一个喽.来试试这个强大的功能.

asp.net组件(7)数据回发 IPostBackDataHandlerusing System;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Collections.Specialized;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web.UI;
asp.net组件(7)数据回发 IPostBackDataHandler
asp.net组件(7)数据回发 IPostBackDataHandler
namespace WebComponent

我们来分析下这个控件.
首先是Text这个属性:我们要模拟textbox控件的效果,所以也提供了一个text属性,
但就有个问题,如果在页面回发中保留输入字符串的值呢?

使用:ViewState["Text"]来保留住状态.返回类型是object所以需要对其强制转换.
还有一点说明一下:IPostBackDataHandler没有回发的功能,所以我们需要在页面中加个Button来回发.

页面回发后,页框架在发送的内容中搜索与实现 IPostBackDataHandler 的服务器控件的 UniqueID 匹配的值
然后,页框架按顺序在每个实现该接口的控件上调用 LoadPostData
那么LoadPostData有什么作用呢?主要作用是可以获取回发回来的数据.
string postedData = postCollection[postDataKey];//回发回来的字符串
postDataKey标识控件的关键字
postCollection发送数据的集合

LoadPostData的返回值为bool型.
return true则,将调用.RaisePostDataChangedEvent产生回发数据发生变化的事件
return false,当然就不产生喽.
所以LoadPostData中提供了回发的数据,就是让你比较,数据是否改变了.

说到这里就完了.
你可以试试拉两个DropDownList控件
一个的AutoPostBack为true ddlAutoPostBack
另一个的AutoPostBack为false ddlNotAutoPostBack
这个属性就是控件是否自动回发.也就是是否实现IPostBackEventHandler这个接口
DropDownList中有个SelectedIndexChanged事件
用来判断选中项是否改变,说明它实现了IPostBackDataHandler这个接口

asp.net组件(7)数据回发 IPostBackDataHandlerusing System;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Data;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Configuration;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Collections;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web.Security;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web.UI;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web.UI.WebControls;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web.UI.WebControls.WebParts;
asp.net组件(7)数据回发 IPostBackDataHandler
using System.Web.UI.HtmlControls;
asp.net组件(7)数据回发 IPostBackDataHandler
asp.net组件(7)数据回发 IPostBackDataHandler
public partial class Ch07 : System.Web.UI.Page

ddlNotAutoPostBack_SelectedIndexChanged永远也不会被执行.
因为ddlNotAutoPostBack的AutoPostBack为false


相关文章:

  • 2021-09-10
  • 2022-02-18
  • 2022-12-23
  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
  • 2021-09-13
  • 2021-05-29
猜你喜欢
  • 2021-10-10
  • 2022-12-23
  • 2022-03-04
  • 2022-12-23
  • 2021-10-15
  • 2021-08-23
  • 2021-08-20
相关资源
相似解决方案