课程咨询 :025-84812726

  • asp.net控件开发(二)-简单属性

    发布:.net培训      来源:南京达内      

  • 我们开发出来的控件一般都需要跟使用控件的人编程人员交互,其中交互有两个途径:一个是属性还有就是事件  。属性可能是简单的类型如:int、string等并不太复杂的类型,也有比较复杂的类型如:集合  。

    一、属性实现交互

    我们还是沿用上面的例子来添加属性 PicShow示例:

    				
    				

    public class PicShow : Control { private string _imgUrl; //属性 public virtual string ImgUrl { get { return this._imgUrl; } set { this._imgUrl = value; } }

    protected override void Render(HtmlTextWriter writer) { writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center"); writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px"); writer.RenderBeginTag(HtmlTextWriterTag.Div); //Create Img Tag writer.AddAttribute(HtmlTextWriterAttribute.Src, this.ImgUrl); writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "80px"); writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "80px"); writer.RenderBeginTag(HtmlTextWriterTag.Img); writer.RenderEndTag(); //End Of Div writer.RenderEndTag(); } }

    上面的示例就是改变了上次的控件只能指定死了图片,这样图片的地址就可以由控件的使用人员自己去指定了  。控件中定义了一个私有字段,通过属性ImgUrl来设置其值,因为我们允许重写其属性,所以定义成了virtual类型的  。这里的属性定义跟一般类的定义是一样的,就不多做说明  。

    二、视图状态

    底下我们在一个项目中应用此控件,但我们发现,这样的控件的属性的状态是没法维持的  。也就是说,它永远只能维持我们初始给它的值  。
    举个例子:

    				
    				

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ControlSatePic.aspx.cs"

    Inherits="ControlSatePic" %>

    <%@ Register Assembly="HenllyeeConrol" Namespace="MyConrol1" TagPrefix="cc1" %>

    http://www.w3.

    org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    ImgUrl="Images/1109508867.jpg">             onclick="btnChange_Click" />

    我们通过按钮来改变其属性:

    protected void btnChange_Click(object sender, EventArgs e) { if (this.psDemo.ImgUrl == "Images/1109508867.jpg") this.psDemo.ImgUrl = "Images/bg.jpg"; else this.psDemo.ImgUrl = "Images/1109508867.jpg"; }


    运行后我们会发现,我们的图片只能改变一次  。原因很简单,客户端发出http请求后,服务器端并没有帮我们去维持上一次的请求信息  。
    在有的时候我们必须要求其维持状态  。状态分为两种:一个是视图状态,一个是控件状态  。

    视图状态在脚本中的表现为:保存到一个叫"_VIEWSTATE"的隐藏域中去,这样来实现保存上次的用户请求  。视图状态是一个集合(ViewState)  。
    我们来继承一个PicShow

    				
    				

    public class viewStatePic : PicShow { public override string ImgUrl { get { string strImgUrl = (string)ViewState["ImgUrl"]; return (strImgUrl == null) ? String.Empty : strImgUrl; } set { ViewState["ImgUrl"] = value; } }   }


    这里我们只是把ImgUrl重写了,通过视图的状态来实现的,这下子我们在使用时就可以维持上次用户的请求  。

    三、控件状态

    我们会发现如果用户禁止使用了视图状态的话(在<%Page%>中添加EnableViewState="false"),我们还是维持不了用户的上次请求,这时我们可以通过控件状态来永远地维持  。
    控件状态的维持一般分为三步:
    1、通过Page.RegisterRequiresControlState()方法来通知控件运行时所在的页面,把此控件维持成控件状态  。
    2、重写SaveControlState()方法来保存控件状态的值  。
    3、最后再将控件状态的值返回到属性中去  。
    控件状态示例:

    				
    				

    public class ControlStatePic : Albumn { protected override void OnInit(EventArgs e) { Page.RegisterRequiresControlState(this); base.OnInit(e); }

    protected override object SaveControlState() { return this.ImgUrl; }

    //从保存的控件视图中取出来 protected override void LoadControlState(object savedState) { this.ImgUrl = savedState as string; } }

    注意的一点,我们在重写OnInit方法时,我们只是需要要添加额外的功能,去注册控件状态,所以一定要调用base.OnInit(e)方法,来保存以前的初始化工作  。

    更多.net资讯请点击:.net培训课程资料。

上一篇:asp.net控件开发(一)-显示控件内容

下一篇:asp.net控件开发(三):处理标签间内容

最新开班日期  |  更多

.NET工程师--全日制班

.NET工程师--全日制班

开班日期:04-28

.NET—零基础周末班

.NET—零基础周末班

开班日期:04-28

.NET—零基础全日制

.NET—零基础全日制

开班日期:04-28

.NET工程师--周末班

.NET工程师--周末班

开班日期:04-28

  • 地址:南京市龙蟠中路30号东来商务中心A座5楼
  • 课程培训电话:025-84812726     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56