asp.net 一个简单的图片广告控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Management;
using System.Web.UI.HtmlControls;
using System.Data;

namespace MyWebControl
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:AdsControl runat=server></{0}:AdsControl>")]
    public class AdsControl : CompositeControl
    {
        #region field
        private ImageButton ibtn;
        private HtmlInputHidden hiddenID;
        private HtmlInputHidden hiddenPath;
        private HtmlInputHidden hiddenUrl;
        private Ads ad = null;
        private static readonly object EventSubmitKey = new object();

        #endregion       
       
        public AdsControl()
        {
            ibtn = new ImageButton();
            ibtn.Click += new ImageClickEventHandler(ibtn_Click);

            hiddenID = new HtmlInputHidden();

            hiddenPath = new HtmlInputHidden();

            hiddenUrl = new HtmlInputHidden();
        }
       
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }

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

        public DataTable DataTable
        {
            set
            {
                ViewState["Data"] = CreateDataString(value);
            }
        }

        public string Value
        {
            get
            {
                String s = (String)ViewState["Data"];
                return ((s == null) ? "" : s);
            }
        }

        private DataTable CreateTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("Path");
            dt.Columns.Add("Url");
            return dt;
        }

        public override Unit Width
        {
            get
            {
                return base.Width;
            }
            set
            {
                base.Width = value;
                ibtn.Width = value;
            }
        }

        public override Unit Height
        {
            get
            {
                return base.Height;
            }
            set
            {
                base.Height = value;
                ibtn.Height = value;
            }
        }

        public override Unit BorderWidth
        {
            get
            {
                return base.BorderWidth;
            }
            set
            {
                base.BorderWidth = value;
                ibtn.BorderWidth = value;
            }
        }

        #region mothed
        protected override void CreateChildControls()
        {
            #region
            this.Controls.Clear();
           
            this.Controls.Add(ibtn);


            this.Controls.Add(hiddenID);

            this.Controls.Add(hiddenPath);

            this.Controls.Add(hiddenUrl);

            base.CreateChildControls();
            #endregion
        }

        protected override void OnPreRender(EventArgs e)
        {
            if (null != ad)
            {
                ibtn.ImageUrl = ad.Path;
                hiddenID.Value = ad.ID;
                hiddenPath.Value = ad.Path;
                hiddenUrl.Value = ad.Url;
            }
            Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "AdsControl", CreateScript());
            base.OnPreRender(e);
        }

        public virtual void ibtn_Click(object sender, ImageClickEventArgs e)
        {
            Ads ad = new Ads(hiddenID.Value, hiddenPath.Value, hiddenUrl.Value);
            OnSubmit(new AdsSubmitEventArgs(ad));
        }  

        protected override void RecreateChildControls()
        {
            EnsureChildControls();
        }

        protected override void Render(HtmlTextWriter writer)
        {
            #region

            AddAttributesToRender(writer);
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1", false);

            writer.RenderBeginTag(HtmlTextWriterTag.Table);

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);

            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            ibtn.RenderControl(writer);
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            hiddenID.RenderControl(writer);
            hiddenPath.RenderControl(writer);
            hiddenUrl.RenderControl(writer);
            writer.RenderEndTag();

            writer.RenderEndTag();
            writer.RenderEndTag();
            #endregion
        }

        private string CreateDataString(DataTable dt)
        {
            #region
            if (null == dt || dt.Rows.Count == 0)
                return "";

            StringBuilder sb = new StringBuilder();
            foreach (DataRow row in dt.Rows)
            {
                sb.Append(row["ID"].ToString()).Append("!!!");
                sb.Append(row["Path"].ToString()).Append("!!!");
                sb.Append(row["Url"].ToString()).Append("###");
            }

            ad = new Ads();
            ad.ID = dt.Rows[0]["ID"].ToString();
            ad.Path = dt.Rows[0]["Path"].ToString();
            ad.Url = dt.Rows[0]["Url"].ToString();

            return sb.ToString();
            #endregion
        }

        protected string CreateScript()
        {
            #region
            StringBuilder sb = new StringBuilder();
            sb.Append("<script language='javascript'>/r/n");
            sb.Append("var AdsID = '" + ibtn.ClientID + "';/r/n");
            sb.Append("var hiddenID = '" + hiddenID.ClientID + "';/r/n");
            sb.Append("var hiddenPath = '" + hiddenPath.ClientID + "';/r/n");
            sb.Append("var hiddenUrl = '" + hiddenUrl.ClientID + "';/r/n");
            sb.Append("var index = 0;/r/n");
            sb.Append("var length = 0;/r/n");
            sb.Append("var data = '" + Value + "';/r/n");
            sb.Append("var wholeAds = new Array();/r/n");
            sb.Append("function Ads(id,path,url)/r/n");
            sb.Append("{/r/n");
            sb.Append("  this.ID = id;/r/n");
            sb.Append("  this.Path = path;/r/n");
            sb.Append("  this.Url = url;/r/n");
            sb.Append("}/r/n");
            sb.Append("function createAds()/r/n");
            sb.Append("{/r/n");
            sb.Append("  var adsString = data.split('###');/r/n");
            sb.Append("  length = adsString.length - 1;/r/n");
            sb.Append("  var s;/r/n");
            sb.Append("  for(var i=0;i<length;i++)/r/n");
            sb.Append("  {/r/n");
            sb.Append("    s = adsString[i].split('!!!');/r/n");
            sb.Append("    wholeAds[i] = new Ads(s[0],s[1],s[2]);/r/n");
            sb.Append("  }/r/n");
            sb.Append("}/r/n");
            sb.Append("function refresh()/r/n");
            sb.Append("{/r/n");
            sb.Append("  if(length <= 0) return;/r/n");
            sb.Append("  index++;/r/n");
            sb.Append("  if(index >= length) index = 0;/r/n");
            sb.Append("  var ibtn = document.all(AdsID);/r/n");
            sb.Append("  ibtn.src = wholeAds[index].Path;/r/n");
            sb.Append("  var h0 = document.all(hiddenID);/r/n");
            sb.Append("  h0.value = wholeAds[index].ID;/r/n");
            sb.Append("  var h1 = document.all(hiddenPath);/r/n");
            sb.Append("  h1.value = wholeAds[index].Path;/r/n");
            sb.Append("  var h2 = document.all(hiddenUrl);/r/n");
            sb.Append("  h2.value = wholeAds[index].Url;/r/n");
 //         sb.Append("  alert('index:' + index + ' == length:' + length);/r/n");
            sb.Append("}/r/n");

            sb.Append("window.attachEvent('onload',createAds);/r/n");
            sb.Append("window.setInterval(refresh, 5000);/r/n");
            sb.Append("</script>/r/n");

            return sb.ToString();
            #endregion
        }
        #endregion

        // 实现事件属性结构
        public event AdsEventHandler Submit
        {
            add
            {
                Events.AddHandler(EventSubmitKey, value);
            }
            remove
            {
                Events.RemoveHandler(EventSubmitKey, value);
            }
        }
        // 实现OnSubmit
        protected virtual void OnSubmit(AdsSubmitEventArgs e)
        {
            AdsEventHandler SubmitHandler = (AdsEventHandler)Events[EventSubmitKey];
            if (SubmitHandler != null)
            {
                SubmitHandler(this, e);
            }
        }

    }

    public delegate void AdsEventHandler(object sender, AdsSubmitEventArgs e);

    public class AdsSubmitEventArgs : EventArgs
    {
        private Ads item;

        public AdsSubmitEventArgs(Ads item)
        {
            this.item = item;
        }

        public Ads Item
        {
            get { return item; }
        }
    }

    [Serializable]
    public class Ads
    {
        private string id;
        private string path;
        private string url;

        public Ads() { }

        public Ads(string id, string path, string url)
        {
            this.id = id;
            this.path = path;
            this.url = url;
        }

        public string ID
        {
            get{ return id; }
            set{ id = value; }
        }

        public string Path
        {
            get{ return path; }
            set{ path = value; }
        }

        public string Url
        {
            get{ return url; }
            set{ url = value; }
        }
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值