深爱那片海 发表于 2015-1-16 22:43:10

ASP.NET网站制作之ASP.NET 2.0服务器控件的地方理回传数据

c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。asp.net|服务器|控件|数据  为自界说服务器控件完成事务,是一个对照庞大的历程。开辟职员不但必要依据上一篇文章中先容的办法,完成捕捉回传事务,并且偶然候还必要介入回传数据处置历程。本文将经由过程典范使用先容处置回传数据的办法。

  1.完成处置回传数据

  在上一篇文章先容的捕捉回传事务过程当中,常常都不触及回传到服务器的控件数据。开辟职员次要完成IPostBackEventHandler接口就可以够乐成捕捉事务,并为之界说事务处置程序。但是,有些服务器控件在使用过程当中,触及回传数据的变更等情形。比方,自界说控件是一个输出控件,当用户输出并回传后,大概会因为回传数据的变更而激发一些事务。为了处置以上成绩,控件类必需完成IPostBackDataHandler接口。上面枚举了接口声明朝码。

publicinterfaceIPostBackDataHandler{publicboolLoadPostData(stringpostDataKey,NameValueCollectionpostCollection);publicvoidRaisePostDataChangedEvent();}
  IPostBackDataHandler接口用于在创立必要由客户端回传到服务器的窗体数据的服务器控件时利用。如上代码所示,该接口包含两个办法,LoadPostData和RaisePostDataChangedEvent。

  与完成捕捉回传事务相似,仅仅在控件类中完成接口是不完全的。上面总结了为了完成处置回传数据而必需完成的两个要点。

  第1、必需在控件出现中将控件的name的属性值设置为UniqueID。这是因为产生回传后,页框架将在发送的内容中搜刮与完成IPostBackDataHandler的服务器控件的UniqueID婚配的值,然后才干挪用LoadPostData办法。

  第2、控件类必需完成IPostBackDataHandler接口,并完成LoadPostData和RaisePostDataChangedEvent办法。LoadPostData办法用来反省提交给服务器的数据。该办法包括两个参数:postDataKey暗示用于辨认控件内数据的关头值,postData是提交数据的汇合,其接纳Key/Value布局便于利用索引称号会见。要会见汇合中的控件数据,只需接纳以下代码便可:"stringnData=postData;"。在LoadPostData办法中,经由过程新数据(客户端发送的数据值)与旧数据(先条件交给客户真个数据值)举行对照的了局来断定办法前往值。假如新旧数据不异,则申明数据没有被修正,办法前往值为false;假如新旧数据分歧,则标明旧数据已被客户端修正,办法前往值true。上面是LoadPostData办法的一个复杂使用。

publicvirtualboolLoadPostData(stringpostDataKey,NameValueCollectionpostData)
{
 stringpresentValue=Text;
 //旧数据
 stringpostedValue=postData;//新数据
 //反省新旧数据
 if(presentValue.Equals(postedValue)||presentValue==null){
  Text=postedValue;
  returntrue;
 }
 returnfalse;
}
  假如LoadPostData办法前往true,.NET框架将主动挪用RaisePostDataChangedEvent办法。该办法用旌旗灯号请求服务器控件工具关照ASP.NET使用程序该控件的形态已变动,控件开辟者能够在该办法中界说依据数据变更激发的事务。上面是复杂的挪用OnTextChanged办法:

publicvirtualvoidRaisePostDataChangedEvent()
{
 OnTextChanged(EventArgs.Empty);
}
  以上是处置回传数据的完成要点,把握这些要点关于事务处置具有相当主要的意义。同时,其内容也申明了以下.NET框架处置回传数据的历程:

  (1)起首在发送的内容中搜刮与完成IPostBackDataHandler的服务器控件的UniqueID婚配的值。

  (2)挪用LoadPostData办法,并前往bool值。

  (3)假如LoadPostData办法前往true,那末挪用RaisePostDataChangedEvent办法。

  (4)实行RaisePostDataChangedEvent办法中界说的OnEvent办法。
  2.典范使用

  上面经由过程一个典范实例申明处置回传数据的中心历程。创立一个自界说文本框控件WebCustomControl,其文本属性Text因回传而变动。控件在加载回传数据后激发TextChanged事务。控件类源代码以下所示:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
namespaceWebControlLibrary{
 
 
 publicclassWebCustomControl:WebControl,IPostBackDataHandler{
  //完成Text属性
  
  
  
  
  publicstringText{
   get{
    strings=(String)ViewState["Text"];
    return((s==null)?String.Empty:s);
   }
   set{
    ViewState["Text"]=value;
   }
  }
  //重写控件出现办法RenderContents
  protectedoverridevoidRenderContents(HtmlTextWriteroutput){
   output.AddAttribute(HtmlTextWriterAttribute.Type,"text");
   output.AddAttribute(HtmlTextWriterAttribute.Value,Text);
   output.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID);
   output.RenderBeginTag(HtmlTextWriterTag.Input);
   output.RenderEndTag();
  }
  //界说事务工具EventTextChanged
  privatestaticreadonlyobjectEventTextChanged=newobject();
  #region完成IPostBackDataHandler成员
  boolIPostBackDataHandler.LoadPostData(stringpostDataKey,System.Collections.Specialized.NameValueCollectionpostCollection){
   //对照初始数据presentValue和回传数据postedValue
   stringpostedValue=postCollection;
   stringpresentValue=Text;
   if(presentValue==null||postedValue!=presentValue){
    Text=postedValue;
    returntrue;
   }
   returnfalse;
  }
  voidIPostBackDataHandler.RaisePostDataChangedEvent(){
   OnTextChanged(EventArgs.Empty);
  }
  #endregion//完成事务处置程序OnTextChanged
  privatevoidOnTextChanged(EventArgseventArgs){
   EventHandlertextChangedHandler=(EventHandler)Events;
   if(textChangedHandler!=null){
    textChangedHandler(this,eventArgs);
   }
  }
  //为TextChanged完成事务属性布局
  publiceventEventHandlerTextChanged{
   add{
    Events.AddHandler(EventTextChanged,value);
   }
   remove{
    Events.RemoveHandler(EventTextChanged,value);
   }
  }
 }
}
  以上源代码完成了一些主要内容。

  (1)控件类必需完成IPostBackDataHandler,由此可以使该控件介入回传数据处置。

  (2)界说属性Text,其属性值保留在ViewState中。当页面回传时,包括Text属性值的ViewState将被提交到服务器。

  (3)重写RenderContents办法,并在该办法中界说控件出现逻辑。

  (4)完成IPostBackDataHandler的办法LoadPostData。对照客户端发送的数据值与先前服务器提交给客户真个数据值是不是不异。假如数据不异,申明数据没有被修正,那末前往false;假如数据分歧,则标明数据已被客户端修正,则前往true。

  (5)完成IPostBackDataHandler的办法RaisePostDataChangedEvent。假如LoadPostData的前往值为true,则实行该办法,即请求挪用OnTextChanged办法。

  (6)界说事务属性布局TextChanged。在Events事务托付列表中,为EventTextChanged事务托付工具界说Add和Remove会见器。

  (7)界说OnTextChanged办法。

  上面是使用自界说服务器控件的Default.aspx源代码:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="wcl"Assembly="WebControlLibrary"Namespace="WebControlLibrary"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<scriptrunat="server">
 voiddemo1_TextChanged(objectsender,EventArgse){
  label1.Text="您在文本框中输出的是"+demo1.Text;
 }
</script>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>处置回传数据</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<wcl:WebCustomControlID="demo1"runat="server"OnTextChanged="demo1_TextChanged"/>
<asp:ButtonID="button1"runat="server"Text="提交"/>
<br/>
<asp:LabelID="label1"runat="server"Font-Size="small">
</asp:Label>
</div>
</form>
</body>
</html>
  在以上代码中,界说了一个WebCustomControl控件,并为该控件界说TextChanged事务的处置办法demo1_TextChanged。该办法请求修正Label控件的Text属性值。最终效果如和所示。


页面初始化最终效果页面提交后的最终效果
  大概某些读者会发生曲解,觉得下面的实例界说了提交按钮的Click事务的事务处置办法。实践否则。本实例并没无为提交按钮界说Click事务的处置办法,而是经由过程处置回传数据,并界说WebCustomControl控件的TextChanged事务来完成的。

  3、小结

  本文针对完成处置回传数据的完成办法举行了先容。把握这些内容将为开辟出具有高质量的服务器控件打下优秀基本。至此,经由过程三篇文章的先容,信任读者已把握了为自界说服务器控件完成事务的基础办法。在随后的内容中,笔者将持续先容使用ASP.NET2.0手艺创立服务器控件的其他内容。
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!

活着的死人 发表于 2015-1-19 21:40:54

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

柔情似水 发表于 2015-1-25 10:44:12

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

因胸联盟 发表于 2015-2-2 21:42:46

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

愤怒的大鸟 发表于 2015-2-8 07:17:20

我的意思是.net好用,从功能上来说比JAVA强还是很明显的。

深爱那片海 发表于 2015-2-24 23:16:27

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

只想知道 发表于 2015-3-7 13:52:22

平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。

灵魂腐蚀 发表于 2015-3-15 07:28:19

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

若相依 发表于 2015-3-21 20:46:22

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
页: [1]
查看完整版本: ASP.NET网站制作之ASP.NET 2.0服务器控件的地方理回传数据