控件开发系列(二)

作为控件、我们都知道肯定会有一些属性。那么现在我们就给控件加上属性,还是直接上代码来得方便

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.ComponentModel;

namespace WriteControl
{
    [DefaultPropertyAttribute("CardholderNameText")]
    [ToolboxData(@"<{0}:TestControlTwo 
    PaymentMethodText='信用卡' CreditCardNoText='信用卡卡号' 
    CardholderNameText='信用卡持有者姓名' SubmitButtonText = '提交'  
    runat='server'></{0}:TestControlTwo>")
    ]
    public class TestControlTwo : Control
    {
        private string paymentMethodText = "";
        private string creditCardNoText = "";
        private string cardholderNameText = "";
        private string expirationDateText = "";
        private string submitButtonText = "提交";

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取和设置信用卡类型")]
        [DefaultValueAttribute("信用卡类型")]
        [CategoryAttribute("Appearance")]
        public virtual string PaymentMethodText
        {
            get { return this.paymentMethodText; }
            set { this.paymentMethodText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置信用卡卡号")]
        [DefaultValueAttribute("信用卡卡号")]
        [CategoryAttribute("Appearance")]
        public virtual string CreditCardNoText
        {
            get { return this.creditCardNoText; }
            set { this.creditCardNoText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置信用卡持有者姓名")]
        [DefaultValueAttribute("信用卡持有者姓名")]
        [CategoryAttribute("Appearance")]
        public virtual string CardholderNameText
        {
            get { return this.cardholderNameText; }
            set { this.cardholderNameText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置最后使用时间")]
        [DefaultValueAttribute("最后使用时间")]
        [CategoryAttribute("Appearance")]
        public virtual string ExpirationDateText
        {
            get { return this.expirationDateText; }
            set { this.expirationDateText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置按钮标签")]
        [DefaultValueAttribute("提交")]
        [CategoryAttribute("Appearance")]
        public virtual string SubmitButtonText
        {
            get { return this.submitButtonText; }
            set { this.submitButtonText = value; }
        }

       

        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write("<table style='width:287px;height:124px;border-width:0;'>");
            writer.Write("<tr>");
            writer.Write("<td>" + PaymentMethodText + "</td>");
            writer.Write("<td>");
            writer.Write("<select name='PaymentMethod' id='PaymentMethod' style='width:100%;'>");
            writer.Write("<option value='0'>Visa</option>");
            writer.Write("<option value='1'>MasterCard</option>");
            writer.Write("</select>");
            writer.Write("</td>");
            writer.Write("</tr>");
            writer.Write("<tr>");
            writer.Write("<td>" + CreditCardNoText + "</td>");
            writer.Write("<td><input name='CreditCardNo' id='CreditCardNo' type='text' /></td>");
            writer.Write("</tr>");
            writer.Write("<tr>");
            writer.Write("<td>" + CardholderNameText + "</td>");
            writer.Write("<td><input name='CardholderName' id='CardholderName' type='text' /></td>");
            writer.Write("</tr>");
            writer.Write("<tr>");
            writer.Write("<td>" + ExpirationDateText + "</td>");
            writer.Write("<td>");
            writer.Write("<select name='Month' id='Month'>");
            for (int day = 1; day < 13; day++)
            {
                if (day < 10)
                    writer.Write("<option value='" + day.ToString() + "'>" + "0" + day.ToString() + "</option>");
                else
                    writer.Write("<option value='" + day.ToString() + "'>" + day.ToString() + "</option>");
            }
            writer.Write("</select>");
            writer.Write(" ");
            writer.Write("<select name='Year' id='Year'>");
            for (int year = 2005; year < 2015; year++)
            {
                writer.Write("<option value='" + year.ToString() + "'>" + year.ToString() + "</option>");
            }
            writer.Write("</select>");
            writer.Write("</td>");
            writer.Write("</tr>");
            writer.Write("<tr>");
            writer.Write("<td align='center' colspan='2'>");
            writer.Write("<input type='submit' value='" + SubmitButtonText + "' />");
            writer.Write("</td>");
            writer.Write("</tr>");
            writer.Write("</table>");

            base.Render(writer);
        }
    }
}

接着我们便可以像平常使用控件那样对这些属性进行修改了

==================================================================================================================================

接下来我们再进行优化,像这种拼接字符串的方式太繁琐,也很容易因为引号的问题而出错。下面的代码跟上面是一样的效果,不过看上去高科技了一些。。。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.ComponentModel;

namespace WriteControl
{
    public class TestControlThree : Control
    {
        private string paymentMethodText = "信用卡类型";
        private string creditCardNoText = "信用卡卡号";
        private string cardholderNameText = "信用卡持有者姓名";
        private string expirationDateText = "最后使用时间";
        private string submitButtonText = "提交";

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取和设置信用卡类型")]
        [DefaultValueAttribute("信用卡类型")]
        [CategoryAttribute("Appearance")]
        public virtual string PaymentMethodText
        {
            get { return this.paymentMethodText; }
            set { this.paymentMethodText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置信用卡卡号")]
        [DefaultValueAttribute("信用卡卡号")]
        [CategoryAttribute("Appearance")]
        public virtual string CreditCardNoText
        {
            get { return this.creditCardNoText; }
            set { this.creditCardNoText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置信用卡持有者姓名")]
        [DefaultValueAttribute("信用卡持有者姓名")]
        [CategoryAttribute("Appearance")]
        public virtual string CardholderNameText
        {
            get { return this.cardholderNameText; }
            set { this.cardholderNameText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置最后使用时间")]
        [DefaultValueAttribute("最后使用时间")]
        [CategoryAttribute("Appearance")]
        public virtual string ExpirationDateText
        {
            get { return this.expirationDateText; }
            set { this.expirationDateText = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置按钮标签")]
        [DefaultValueAttribute("提交")]
        [CategoryAttribute("Appearance")]
        public virtual string SubmitButtonText
        {
            get { return this.submitButtonText; }
            set { this.submitButtonText = value; }
        }

        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "0");
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + PaymentMethodText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "PaymentMethod");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "PaymentMethod");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            writer.RenderBeginTag(HtmlTextWriterTag.Select);

            writer.AddAttribute(HtmlTextWriterAttribute.Value, "0");
            writer.RenderBeginTag(HtmlTextWriterTag.Option);
            writer.Write("Visa");
            writer.RenderEndTag();

            writer.AddAttribute(HtmlTextWriterAttribute.Value, "1");
            writer.RenderBeginTag(HtmlTextWriterTag.Option);
            writer.Write("MasterCard");
            writer.RenderEndTag();

            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + CreditCardNoText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CreditCardNo");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CreditCardNo");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + CardholderNameText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CardholderName");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CardholderName");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + ExpirationDateText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Month");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Month");
            writer.RenderBeginTag(HtmlTextWriterTag.Select);

            for (int day = 1; day < 13; day++)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Value, day.ToString());
                writer.RenderBeginTag(HtmlTextWriterTag.Option);

                if (day < 10)
                    writer.Write("0" + day.ToString());
                else
                    writer.Write(day);

                writer.RenderEndTag();
            }

            writer.RenderEndTag();
            writer.Write(" ");

            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Year");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Year");
            writer.RenderBeginTag(HtmlTextWriterTag.Select);

            for (int year = 2005; year < 2015; year++)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Value, year.ToString());
                writer.RenderBeginTag(HtmlTextWriterTag.Option);
                writer.Write(year);
                writer.RenderEndTag();
            }

            writer.RenderEndTag();

            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
            writer.AddAttribute(HtmlTextWriterAttribute.Value, SubmitButtonText);
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
        }
    }
}

接下来如果我们再我们使用控件的页面中加上这样一段代码

if (!IsPostBack)
    {
      creditcardform.CardholderNameText = "Full Name";
      creditcardform.CreditCardNoText = "CreditCardNo";
      creditcardform.ExpirationDateText = "ExpirationDate";
      creditcardform.PaymentMethodText = "Payment Options";
      creditcardform.SubmitButtonText = "Send";
    }

这说明了我们给控件赋值没有赋上去啊,那么我们还要对我们的代码进行进一步的修改。最终的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.ComponentModel;

namespace WriteControl
{
    public class TestControlThree : Control
    {
        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取和设置信用卡类型")]
        [DefaultValueAttribute("信用卡类型")]
        [CategoryAttribute("Appearance")]
        public virtual string PaymentMethodText
        {
            get { return ViewState["PaymentMethodText"] != null ? (string)ViewState["PaymentMethodText"] : "信用卡类型1"; }
            set { ViewState["PaymentMethodText"] = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置信用卡卡号")]
        [DefaultValueAttribute("信用卡卡号")]
        [CategoryAttribute("Appearance")]
        public virtual string CreditCardNoText
        {
            get { return ViewState["CreditCardNoText"] != null ? (string)ViewState["CreditCardNoText"] : "信用卡卡号1"; }
            set { ViewState["CreditCardNoText"] = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置信用卡持有者姓名")]
        [DefaultValueAttribute("信用卡持有者姓名")]
        [CategoryAttribute("Appearance")]
        public virtual string CardholderNameText
        {
            get { return ViewState["CardholderNameText"] != null ? (string)ViewState["CardholderNameText"] : "信用卡持有者姓名1"; }
            set { ViewState["CardholderNameText"] = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置最后使用时间")]
        [DefaultValueAttribute("最后使用时间")]
        [CategoryAttribute("Appearance")]
        public virtual string ExpirationDateText
        {
            get { return ViewState["ExpirationDateText"] != null ? (string)ViewState["ExpirationDateText"] : "最后使用时间1"; }
            set { ViewState["ExpirationDateText"] = value; }
        }

        [BrowsableAttribute(true)]
        [DescriptionAttribute("获取或设置按钮标签")]
        [DefaultValueAttribute("提交")]
        [CategoryAttribute("Appearance")]
        public virtual string SubmitButtonText
        {
            get { return ViewState["SubmitButtonText"] != null ? (string)ViewState["SubmitButtonText"] : "提交"; }
            set { ViewState["SubmitButtonText"] = value; }
        }

        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "0");
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + PaymentMethodText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "PaymentMethod");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "PaymentMethod");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            writer.RenderBeginTag(HtmlTextWriterTag.Select);

            writer.AddAttribute(HtmlTextWriterAttribute.Value, "0");
            writer.RenderBeginTag(HtmlTextWriterTag.Option);
            writer.Write("Visa");
            writer.RenderEndTag();

            writer.AddAttribute(HtmlTextWriterAttribute.Value, "1");
            writer.RenderBeginTag(HtmlTextWriterTag.Option);
            writer.Write("MasterCard");
            writer.RenderEndTag();

            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + CreditCardNoText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CreditCardNo");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CreditCardNo");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + CardholderNameText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CardholderName");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CardholderName");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("<strong>" + ExpirationDateText + "</strong>");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Month");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Month");
            writer.RenderBeginTag(HtmlTextWriterTag.Select);

            for (int day = 1; day < 13; day++)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Value, day.ToString());
                writer.RenderBeginTag(HtmlTextWriterTag.Option);

                if (day < 10)
                    writer.Write("0" + day.ToString());
                else
                    writer.Write(day);

                writer.RenderEndTag();
            }

            writer.RenderEndTag();
            writer.Write(" ");

            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Year");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Year");
            writer.RenderBeginTag(HtmlTextWriterTag.Select);

            for (int year = 2005; year < 2015; year++)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Value, year.ToString());
                writer.RenderBeginTag(HtmlTextWriterTag.Option);
                writer.Write(year);
                writer.RenderEndTag();
            }

            writer.RenderEndTag();

            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
            writer.AddAttribute(HtmlTextWriterAttribute.Value, SubmitButtonText);
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
        }
    }
}

从上面我们不难看出原来存放控件的值是用的ViewState来存放的,好了 这章就到这里。。。

最后附上一张MSDN的属性类别图片



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值