现在的位置: 首页 > 综合 > 正文

System.Web.UI

2012年12月24日 ⁄ 综合 ⁄ 共 2386字 ⁄ 字号 评论关闭

System.Web.UI是用来提供开发界面元素的基本类的命名空间。

C#2.0中的服务器控件都包括数据绑定、视图状态等功能,要为自定义的控件实现这些功能,需要使用System.Web.UI命名空间提供的类。这些类涉及控件的属性、方法和事件等所有方面。

在System.Web.UI中,最重要的两个类就是“Page”和“Control”了。“Page”是所有页面级别控件的基类,如“MasterPage”;而“Control"则为所有服务器控件提供通用的功能。

 

 

管理视图状态的类:StateBag
StateBag类为控件提供属性保存的功能。StateBag类被成为状态包,其所包含的内容是页面上所有控件的属性集合,这些集合在.NET中以Control.ViewState的形式被访问。
举例来说,一个TextBox在页面回发时,如何保存用户已经填写的数据?这就需要使用StateBag来保存用户输入的值,也就是保存TextBox控件的视图状态。视图状态的跟踪在再页面的OnInit方法以后。StateBag类以字典形式保存其内部控件视图,使用的结构是键/值对,再将其以隐藏字段的形式发送到浏览器。

语法定义:
public sealed class StateBag:IStateManager,IDictionary,ICollection,IEnumerable
"IStateManager"接口定义访问视图状态的一些方法,其他三个接口都用来定义与集合字典有关的方法,具体定义将在“System.collections”命名空间内重点介绍。
使用StateBag类的构造函数有重载,其语法如下:
public StateBag(bool ignoreCase)
public StateBag()
带参数ignoreCase的构造函数,表示可以区分存储数据的大小写。在使用StateBag类的时候,通常不使用new关键字实例化此类,而是直接使用控件的ViewState属性,后者属于StateBag类的一个对象。

属性详解:
StateBag类是一个字典存储结构,所包含的属性与其他字典类相似。下面列出了这些属性及其说明:
Count:StateItem对象数量
Item:存储的项的值
Keys:项的键集合
Values:视图状态的集合
方法详解:
StateBag类的方法也是所有字典类基本具备的方法。下面列出常用的:
Add:添加项到StateBag
Clear:清空StateBag中的项
IsItemDirty:判断StateBag中项是否标记为已修改
Remove:移除指定的项
SetDirty:设置StateBag的已修改标记
SetItemDirty:设置StateBag中某项的已修改标记
下面的代码演示如何使用StateBag类中的方法:

ViewState.Add("TextValue",TextBox1.Text); //添加项
if(ViewState.IsItemDirty("TextValue")) //判断是否修改
   ViewState.SetItemDirty("TextValue",true);  //设置为修改状态
ViewState.Remove("TextValue"); //移除项
ViewState.Clear(); //清空视图

典型应用:在自定义控件中保存其属性

本例的目的是当前用户刷新界面时,保存控件设置的内容。现在的服务器控件都具备这种属性,本例子只是为了说明StateBag类的作用原理。

演示实例的步骤:

1、新建一个网站,命名为“StateBagSample”.

2、在App_Code目录下添加一个类,MyLabel.cs

3、在类中自定义一个控件,此控件继承Control类,只有一个属性“Text”,功能类似于一个简单的Label控件。代码如下,注意其并不保存用户属性。

/// <summary>
/// MyTextBox 的摘要说明
/// </summary>
namespace MyLabel
{
    public class MyLabel : Control
    {
        private string text;

        public string Text
        {
            get { return this.text; }
            set { this.text = value; }
            //get { return ViewState["Text"].ToString(); }
            //set { ViewState["Text"] = value; }
        }
        public MyLabel()
        { }
        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write(this.Text);
        }
    }
}

4、打开Default.aspx页,在源代码视图中注册定义的控件,代码如下:

<%@ Register TagPrefix="mylbl"   Namespace="MyLabel"%>

5、在源代码视图中,添加一个Button,用来刷新页面。添加自定义控件的代码如下:

    <mylbl:MyLabel ID="lbl1" runat="server" Text=""></mylbl:MyLabel>

6、在Page_Load事件中输入测试代码,如下:

        if(!this.IsPostBack)
            lbl1.Text = "this is a test";

7、运行程序,可以看到自定义控件显示的内容,再单击Button按钮,发现自定义控件的内容消失了,这说明没有保存视图状态。

8、修改自定义控件的类“MyLabel.cs”的属性如下,再重复7步骤的测试,测试是否正常保存了控件的状态。

get { return ViewState["Text"].ToString(); }

set { ViewState["Text"] = value; }

结果:正常保存了控件的状态。
 

抱歉!评论已关闭.