您的位置:首页 > 编程语言 > ASP

asp.net组件(7)数据回发 IPostBackDataHandler

2007-12-19 20:01 453 查看
先来做个实验:

新建一网页.拉入一个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提供了这个魔力.

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

using System;

using System.Collections.Specialized;

using System.Web.UI;

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这个接口

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

public partial class Ch07 : System.Web.UI.Page

ddlNotAutoPostBack_SelectedIndexChanged永远也不会被执行.

因为ddlNotAutoPostBack的AutoPostBack为false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
-->
新的分享
章节导航