zoukankan      html  css  js  c++  java
  • Asp.net自定义控件开发任我行(4)-ViewState保存控件状态

    • 摘要

      上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态

    • 内容

      我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按钮Button

    <body>
        <form id="form1" runat="server">
        <XYB:TextEdit ID="txt" DropDwonHeight="200" DropdwonWidth="200" runat="server"></XYB:TextEdit>
        <asp:Button runat="server" ID="btn" Text="点击我" OnClick="btn_Click" />
        </form>
    </body>

    我们在Page_Load里面给属性赋值,代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace XYB.UI
    {
        public partial class TextEditUI : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    txt.DropDwonHeight = 100;
                    txt.DropdwonWidth = 100;
                }
               
            }
    
            protected void btn_Click(object sender, EventArgs e)
            {
    
            }       
        }
    }

    我们运行浏览一下,第一次结果的确是100*100,但当我们点击一下按钮后,长和宽都还原成200了,也就是属性值没有被保存,现在我们只需要修改TextEdit.cs代码了,我们使用ViewState来保存控件属性状态值

    using System;
    using System.Text;
    using System.Web.UI;
    using System.ComponentModel;//包含组件开发所必须含有的(属性)Attribute;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Collections.Generic;
    
    namespace XYB.Controls
    {
        public class TextEdit:TextBox
        {
            private int _dropDwonHeight;
            private int _dropdwonWidth;
    
            [Description("下拉框的高度"),//属性的描述
             Category("下拉框")//所属目录
            ]
            public int DropDwonHeight
            {
                //如果前台控件没有给DropDwonHeight赋值,那它的初始值是50
                get { return ViewState["DropDwonHeight"] == null ? 150 : Convert.ToInt32(ViewState["DropDwonHeight"]); }
                set { ViewState["DropDwonHeight"] = value; }
            }
           
            [Description("下拉框的宽度"),
             Category("下拉框")
            ]
            public int DropdwonWidth
            {
                get { return ViewState["DropdwonWidth"] == null ? 150 : Convert.ToInt32(ViewState["DropdwonWidth"]); }
                set { ViewState["DropdwonWidth"] = value; }
            }
    
            protected override void Render(HtmlTextWriter writer)
            {
                base.Render(writer);
                Panel pnlDropDown = new Panel();
                pnlDropDown.ID = "pnlDropDownID";
                pnlDropDown.Height = DropDwonHeight;
                pnlDropDown.Width = DropdwonWidth;
                pnlDropDown.Style["border"] = "1px solid #ccc";//设置边框样式
                pnlDropDown.RenderControl(writer);//把下拉框呈现到网页上
            }        
        }
    }

    重新生成控件运行,ok,当页面回发时,属性值依然不变。 

    • 注意

      ViewState只在本页中可以有效,比如A页面中有一个ViewState["A"],那么在B页面中ViewState["A"]是为null的。 

    • 下集预告

      自定义控件内嵌资源,预知后事如何,请看下回分解。敬请关注我!!

  • 相关阅读:
    云HBase发布全文索引服务,轻松应对复杂查询
    eclipse调试断点
    IntelliJ IDEA使用小技巧
    jQuery遍历not的用法
    request.querystring和request.form的区别
    ppt打不开,显示发现文件中的内容有问题。可尝试修复此演示文稿
    中文乱码 encodeURI来解决URL传递时的中文问题
    Http请求中Content-Type讲解以及在Spring MVC中的应用
    Display Tag Lib Table进行分页
    js刷新页面
  • 原文地址:https://www.cnblogs.com/xuyubing/p/3325189.html
Copyright © 2011-2022 走看看