|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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[postDataKey];"。在LoadPostData办法中,经由过程新数据(客户端发送的数据值)与旧数据(先条件交给客户真个数据值)举行对照的了局来断定办法前往值。假如新旧数据不异,则申明数据没有被修正,办法前往值为false;假如新旧数据分歧,则标明旧数据已被客户端修正,办法前往值true。上面是LoadPostData办法的一个复杂使用。
publicvirtualboolLoadPostData(stringpostDataKey,NameValueCollectionpostData)
{
stringpresentValue=Text;
//旧数据
stringpostedValue=postData[postDataKey];//新数据
//反省新旧数据
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{
[DefaultProperty("Text")]
[ToolboxData("<{0}:WebCustomControlrunat=server></{0}:WebCustomControl>")]
publicclassWebCustomControl:WebControl,IPostBackDataHandler{
//完成Text属性
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
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[postDataKey];
stringpresentValue=Text;
if(presentValue==null||postedValue!=presentValue){
Text=postedValue;
returntrue;
}
returnfalse;
}
voidIPostBackDataHandler.RaisePostDataChangedEvent(){
OnTextChanged(EventArgs.Empty);
}
#endregion//完成事务处置程序OnTextChanged
privatevoidOnTextChanged(EventArgseventArgs){
EventHandlertextChangedHandler=(EventHandler)Events[EventTextChanged];
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#的初学者在这里呼唤着! |
|