您的位置:首页 > 编程语言 > ASP

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

2007-11-22 09:42 761 查看
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; }
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐