最近一直在做MVC项目,对于WEBFORM 好像快忘记了。周末无聊,顺带看看他人的笔记。再次温习下。

复习大纲:

导航、页面生命周期及其它导论

一、服务器控件生命周期

二、控件开发基础

三、Asp.net服务端状态管理

四、Asp.net客户端状态管理

五、数据回传

六、WebControl基类

七、服务器控件事件

在Asp.net中,利用Http Post的回传机制意味着可以再客户端存储状态并且可以在服务器接收.Asp.net中大部分控件都提供了存储自身状态的功能并且在自身状态改变时引发对应事件。IPostDataHandler接口提供了在服务器处理客户端通过Http Post回传数据的方法。

IPostDataHandler

通过实现IPostDataHandler接口,服务器可以在不使用Page和Request对象的情况下来读取客户端回传数据。IPostDataHandler还提供了在用户状态改变的情况下来引发相应事件的框架。IPostDataHandler的定义如下:

public interface IPostBackDataHandler

{

public bool LoadPostData(string postDataKey,

NameValueCollection postCollection);

public void RaisePostDataChangedEvent();

}

对于LoadPostData函数,如果返回值为true,则会引发下面的RaisePostDataChangeEvent方法。这个方法中我们可以加入需要引发的事件,比如:

public virtual void RaisePostDataChangeEvent()

{

OnTextChanged(EventArgs.Empty);

}

这个方法有两个参数,先说第二个参数,第二个参数返回键值对,key(键)是控件的unique id,这个id是通过客户端的id来决定的,大多数情况下,这两个id相等,比如客户端的<input id=”xx” runat=”server” />则在服务端的unique id也会是”xx”,但是如果控件放在gridview或者masterpage里的话,uniqueid会是母控件的uniqueid+分隔符+子控件的uniqueid.而value(值)则是对应控件的回传数据。比如下图:

    
在页面只有两个控件,TextBox控件和Button控件,前两个是asp.net内置的ViewState和验证。而第三个是id名为”cc”的TextBox,第四个是id为Button1的button.则可以看出postCollection参数其实是页面所有实现了IPostBackDataHandler接口的回传数据,而第一个参数postDataKey则是这个方法所属控件的uniqueid.

所以可以这样来获得本控件这一次的回传数据:

postCollection[postDataKey]

当然也可以获得其他控件这一次的回传数据以达到和其它控件的交互,比如:

postCollection[3]

下面通过一个Demo来展示IPostDataHandler

DEMO1  自己写一个拥有状态的TextBox控件

     通过这个Demo可以更清楚的让我们明白ViewState和PostBack Data之间通过实现IPostDataHandler的交互。

代码如下:

[ToolboxData("<{0}:textboxDemo runat=server></{0}:textboxDemo>")]

public class TextboxDemo : Control, IPostBackDataHandler

{

string _text;

public virtual string Text

{

get

{

object text = ViewState["Text"];

if (text == null)

return string.Empty;

else

return (string)text;

}

set

{

ViewState["Text"] = value;

}

}

public bool LoadPostData(string postDataKey,NameValueCollection postCollection)

{

Text = postCollection[postDataKey];

return false;

}

public virtual void RaisePostDataChangedEvent()

{

}

override protected void Render(HtmlTextWriter writer)

{

Page.VerifyRenderingInServerForm(this);

base.Render(writer);

//输出 <INPUT type="text">标签

writer.Write("<INPUT type=""text"" name=""");

writer.Write(this.UniqueID);

writer.Write(""" value=""" + this.Text + """ />");

}

}

这是一个简单的TextBox实现。通过实现IPostBackDataHandler接口,我们可以在每次回传到服务器后保存TextBox的状态.即TextBox的Value的值.

注意在Render方法里有:Page.VerifyRenderingInServerForm(this);,这行代码表示此控件必须在<form>标签内,如果不在此标签内,则会报错.所有需要实现数据回传的控件最好都要使用这个方法.

TextBoxDemo控件的使用方法这里就不再累述了。

ASP.net控件状态

在asp.net 2.0以后的版本。可以通过设置控件的EnableViewState属性来控制单个控件是否保存其状态。在一些访问量比较大的网站上,如果不注意关闭不需要的ViewState,则用户在每回提交时都会导致传送额外的ViewState字符串,这回导致性能问题.

控件的状态还有一个很棒的特性是在即使ViewState被禁用的情况下,控件的状态保持依然可用.

转载于:https://www.cnblogs.com/taoqianbao/p/3486236.html

【转】Asp.net控件开发学习笔记整理篇 - 数据回传相关推荐

  1. 【转】Asp.net控件开发学习笔记整理篇 - WebControl基类

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  2. 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  3. Asp.net控件开发学习笔记(三)-控件开发基础

    封装      在asp.net中,控件被分为两类.用户控件和自定义服务器控件.前者就是我们经常用来将一些可复用的内容封装成的.ascx文件.这里主要研究后者. 创建自定义服务器控件      创建自 ...

  4. Asp.net控件开发学习笔记(六)----数据回传

    在Asp.net中,利用Http Post的回传机制意味着可以再客户端存储状态并且可以在服务器接收.Asp.net中大部分控件都提供了存储自身状态的功能并且在自身状态改变时引发对应事件.IPostDa ...

  5. Asp.net控件开发学习笔记(九)----服务器控件事件

    EventCollection 如果在单个控件中有多个事件,那么使用System.ComponentModel.EventHandlerList对事件进行保存将会在内存占用上有不错的提高.EventH ...

  6. Asp.net控件开发学习笔记(四)---Asp.net服务端状态管理

    Asp.net请求处理构架 当一个客户端浏览器对IIS发起访问请求资源时(比如一个.aspx文件),Asp.net会初始化并维护一个包含了多个Response和Request的Http Session ...

  7. ActiveX 控件开发学习笔记1

    1.  char * 型的变量downloadip赋初值的时候用menset(downloadip, 0, strlen(downloadip)): cstring型的变量sourceip赋初值可用, ...

  8. 一起谈.NET技术,asp.net控件开发基础(18)

    本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的 ...

  9. 一起谈.NET技术,asp.net控件开发基础(20)

    上面我们讨论了数据绑定控件的做法,但都未涉及到asp.net2.0中数据源控件的用法,让用惯了数据源控件的人可能感觉不适应.这次我们就开始讨论在asp.net2.0中,我们该如何重新定义数据绑定控件. ...

最新文章

  1. oracle11g insufficient,ORACLE11GORA-01031:insufficientprivileges
  2. linux下如何使用有道词典
  3. mysql用编号查询密码,【mysql中退出当前数据库】
  4. 很多大企业都在用的Pentaho 商业分析软件中存在多个严重缺陷
  5. 我是如何从零基础自学到找到工作经过
  6. NOIP2020退役记
  7. 电脑出现GRUB4DOS 0.4.5c、、、怎么办
  8. 转载:Arcgis 地理配准步骤(底图校正)
  9. excel sumifs()对多列求和
  10. 温度测量基于c语言,基于PN结的温度测量系统设计论文(C语言)--189876772.doc
  11. 新手福利!超详细图标设计的七大原则
  12. GJM : 使用浏览器的计算力,对抗密码破解 [转载]
  13. 【问题解决】Error:(3, 46) java: 程序包org.springframework.context.annotation不存在
  14. IT专家的十大热门领域
  15. MySQL中In与Exists的区别
  16. 《西南联大行思录》之感想20180911
  17. 赋能金融领域,国密改造让安全合规更加牢固
  18. 三年“云改”,移动云这份答卷有多“硬”?
  19. [book]《领导梯队》
  20. 什么叫侧面指纹识别_面指纹识别最新资讯

热门文章

  1. MongoDB学习笔记三:查询
  2. 【转载】Android Animation 简介(官方文档翻译) ---- 翻译的很好!
  3. Aspose.Java实现word转pdf,添加水印等操作
  4. 多级指针和静动态内存的跨函数访问
  5. 微型计算机系统包括( )几部分,微型计算机系统包括哪几个部分?
  6. Lombok中@Data注解 @ToString注解 @NoArgsConstructo注解 @AllArgsConstructor注解
  7. 项目测试基础:白盒测试相关知识笔记
  8. 代码神注释鉴赏,喜欢拿去用
  9. 怎样获取当前页面值php,想要得到当前页面的所有url参数信息怎么用PHP来实现?...
  10. JDK 8 新特性 之 default关键字