在项目开发中,很多地方都使用了window.open 和window.showdialog两种弹出窗口模式。刚开始看公司老的一些项目里都是用这些的,自己也就跟着用,后来感觉每个页面都写JS,太麻烦了,即使是COPY一下,也觉得不爽,而且老是用这两种,感觉没什么意思,难看,能不能用个好看点的,呵呵。看来我对美好的事物还是有追求的。
 在网络上找到了一个不错的DIV弹出窗口,还算漂亮吧
网址是http://www.subimage.com/dhtml/subModal
对象是找好了,接下就是给它弄点嫁妆,尤其是衣裳,好好的修饰打扮下才能出来见人啊
大多数的弹出窗口都是要有返回值的,所以决定控件的模样是一个textbox 加两个图片按钮如图
DIV弹出窗口控件_弹出窗口 控件一个是选择,另外一个清空按钮
开始先写这个复合控件
DIV弹出窗口控件_弹出窗口 控件_02using System;
DIV弹出窗口控件_弹出窗口 控件_02using System.Collections.Generic;
DIV弹出窗口控件_弹出窗口 控件_02using System.Text;
DIV弹出窗口控件_弹出窗口 控件_02using System.Web.UI;
DIV弹出窗口控件_弹出窗口 控件_02using System.Web.UI.WebControls;
DIV弹出窗口控件_弹出窗口 控件_02using System.Web.UI.HtmlControls;
DIV弹出窗口控件_弹出窗口 控件_02using System.ComponentModel;
DIV弹出窗口控件_弹出窗口 控件_02namespace StarTech.WebControls
DIV弹出窗口控件_弹出窗口 控件_10DIV弹出窗口控件_弹出窗口 控件_11DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13    [ParseChildren(true)]
DIV弹出窗口控件_弹出窗口 控件_13    [DefaultValue("Text"), ToolboxData("<{0}:STSingleCarSelect runat='server' Width='150px' ></{0}:STSingleCarSelect>")]
DIV弹出窗口控件_弹出窗口 控件_13    public class STSingleCarSelect : BaseFormControl
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17    DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13        private TextBox _textbox;
DIV弹出窗口控件_弹出窗口 控件_13        private HiddenField _hiddenField;
DIV弹出窗口控件_弹出窗口 控件_13        private HtmlImage _image;
DIV弹出窗口控件_弹出窗口 控件_13        private HtmlImage _delimage = new HtmlImage();
DIV弹出窗口控件_弹出窗口 控件_13        private bool _requiredfield = false;
DIV弹出窗口控件_弹出窗口 控件_13        private int _intTextBoxWidth = 100;
DIV弹出窗口控件_弹出窗口 控件_13        private int _intDiglogHeight = 500;
DIV弹出窗口控件_弹出窗口 控件_13        private int _intDiglogWidth = 700;
DIV弹出窗口控件_弹出窗口 控件_13        private string _strDiglogTitle = "车辆列表";
DIV弹出窗口控件_弹出窗口 控件_13        private string _sourceUrl = "~/ControlSource/Dialog/SingleCarListSelect.aspx";
DIV弹出窗口控件_弹出窗口 控件_17DIV弹出窗口控件_弹出窗口 控件_16        属性#region 属性
DIV弹出窗口控件_弹出窗口 控件_13        [Description("文本框Text"), Category("ST属性")]
DIV弹出窗口控件_弹出窗口 控件_13        public string Text
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            get
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                EnsureChildControls();
DIV弹出窗口控件_弹出窗口 控件_13                return _textbox.Text;
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_13            set
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                EnsureChildControls();
DIV弹出窗口控件_弹出窗口 控件_13                _textbox.Text = value;
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        [Description("文本框ID"), Category("ST属性")]
DIV弹出窗口控件_弹出窗口 控件_13        public string Value
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            get
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                EnsureChildControls();
DIV弹出窗口控件_弹出窗口 控件_13                return _hiddenField.Value;
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_13            set
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                EnsureChildControls();
DIV弹出窗口控件_弹出窗口 控件_13                _hiddenField.Value = value;
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        [Description("是否必填"), Category("ST属性")]
DIV弹出窗口控件_弹出窗口 控件_13        public bool RequiredField
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            get DIV弹出窗口控件_弹出窗口 控件_12{ return _requiredfield; }
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            set DIV弹出窗口控件_弹出窗口 控件_12{ _requiredfield = value; }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        private string RegName
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            get
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                return "RegSingleCarScript";
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        [Description("文本框宽度"), Category("ST属性")]
DIV弹出窗口控件_弹出窗口 控件_13        public int TextBoxWidth
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            get DIV弹出窗口控件_弹出窗口 控件_12{ return _intTextBoxWidth; }
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            set DIV弹出窗口控件_弹出窗口 控件_12{ _intTextBoxWidth = value; }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        [Description("弹出窗体高度"), Category("ST属性")]
DIV弹出窗口控件_弹出窗口 控件_13        public int DiglogHeight
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            get DIV弹出窗口控件_弹出窗口 控件_12{ return _intDiglogHeight; }
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            set DIV弹出窗口控件_弹出窗口 控件_12{ _intDiglogHeight = value; }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        [Description("弹出窗体宽度"), Category("ST属性")]
DIV弹出窗口控件_弹出窗口 控件_13        public int DiglogWidth
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            get DIV弹出窗口控件_弹出窗口 控件_12{ return _intDiglogWidth; }
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            set DIV弹出窗口控件_弹出窗口 控件_12{ _intDiglogWidth = value; }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        public string DiglogTitle
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            get DIV弹出窗口控件_弹出窗口 控件_12{ return _strDiglogTitle; }
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            set DIV弹出窗口控件_弹出窗口 控件_12{ _strDiglogTitle = value; }
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_42        #endregion
DIV弹出窗口控件_弹出窗口 控件_13        protected override void OnPreRender(EventArgs e)
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            this.Page.ClientScript.RegisterClientScriptResource(typeof(JsCommon), "StarTech.WebControls.ControlSource.JScript.common.js");
DIV弹出窗口控件_弹出窗口 控件_13            this.Page.ClientScript.RegisterClientScriptResource(typeof(JsSubModal), "StarTech.WebControls.ControlSource.JScript.subModal.js");
DIV弹出窗口控件_弹出窗口 控件_13            string resource = Page.ClientScript.GetWebResourceUrl(this.GetType(), "StarTech.WebControls.ControlSource.Css.subModal.css");
DIV弹出窗口控件_弹出窗口 控件_13            string csslink = "<link href='" + resource + "' rel='stylesheet' type='text/css' />";
DIV弹出窗口控件_弹出窗口 控件_13            Page.Header.Controls.Add(new LiteralControl(csslink));
DIV弹出窗口控件_弹出窗口 控件_13            if (!this.Page.ClientScript.IsStartupScriptRegistered(this.RegName))
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                this.Page.ClientScript.RegisterStartupScript(this.GetType(), this.RegName, this.RegSouceScript(), false);
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_13            base.OnPreRender(e);
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        protected override void AddAttributesToRender(HtmlTextWriter writer)
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            EnsureChildControls();
DIV弹出窗口控件_弹出窗口 控件_13            _image.Attributes.Add("onclick", "OpenPopWinSingleCar()");
DIV弹出窗口控件_弹出窗口 控件_13            _delimage.Attributes.Add("onclick", "ClearSingleCar()");
DIV弹出窗口控件_弹出窗口 控件_13            base.AddAttributesToRender(writer);
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_13        protected override void CreateChildControls()
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Clear();
DIV弹出窗口控件_弹出窗口 控件_13            _textbox = new TextBox();
DIV弹出窗口控件_弹出窗口 控件_13            _textbox.ID = _textbox.UniqueID;
DIV弹出窗口控件_弹出窗口 控件_13            _textbox.CssClass = CssClass;
DIV弹出窗口控件_弹出窗口 控件_13            _textbox.TextMode = TextBoxMode.SingleLine;
DIV弹出窗口控件_弹出窗口 控件_13            _textbox.Attributes["Style"] = "border:1 solid gray;";
DIV弹出窗口控件_弹出窗口 控件_13            _textbox.Width = Unit.Pixel(_intTextBoxWidth);
DIV弹出窗口控件_弹出窗口 控件_13            _textbox.Height = this.Height;
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Add(_textbox);
DIV弹出窗口控件_弹出窗口 控件_13            //空格
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Add(new LiteralControl("&nbsp;"));
DIV弹出窗口控件_弹出窗口 控件_13            //选择图片
DIV弹出窗口控件_弹出窗口 控件_13            _image = new HtmlImage();
DIV弹出窗口控件_弹出窗口 控件_13            _image.ID = _image.UniqueID;
DIV弹出窗口控件_弹出窗口 控件_13            _image.Alt = "选 择";
DIV弹出窗口控件_弹出窗口 控件_13            _image.Src = Page.ClientScript.GetWebResourceUrl(this.GetType(), "StarTech.WebControls.ControlSource.Images.application_add.png");
DIV弹出窗口控件_弹出窗口 控件_13            _image.Style.Value = "CURSOR:hand;";
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Add(_image);
DIV弹出窗口控件_弹出窗口 控件_13            //空格
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Add(new LiteralControl("&nbsp;"));
DIV弹出窗口控件_弹出窗口 控件_13            //删除
DIV弹出窗口控件_弹出窗口 控件_13            _delimage.ID = _delimage.UniqueID;
DIV弹出窗口控件_弹出窗口 控件_13            _delimage.Src = Page.ClientScript.GetWebResourceUrl(this.GetType(), "StarTech.WebControls.ControlSource.Images.application_delete.png");
DIV弹出窗口控件_弹出窗口 控件_13            _delimage.Style.Value = "CURSOR:hand;";
DIV弹出窗口控件_弹出窗口 控件_13            _delimage.Alt = "删 除";
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Add(_delimage);
DIV弹出窗口控件_弹出窗口 控件_13            //隐藏控件
DIV弹出窗口控件_弹出窗口 控件_13            _hiddenField = new HiddenField();
DIV弹出窗口控件_弹出窗口 控件_13            Controls.Add(_hiddenField);
DIV弹出窗口控件_弹出窗口 控件_13            if (_requiredfield)
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17            DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                this.Controls.Add(new LiteralControl("<font color=red>*</font>"));
DIV弹出窗口控件_弹出窗口 控件_13                RequiredFieldValidator validator = new RequiredFieldValidator();
DIV弹出窗口控件_弹出窗口 控件_13                validator.ControlToValidate = _textbox.ID;
DIV弹出窗口控件_弹出窗口 控件_13                validator.Text = "必填";
DIV弹出窗口控件_弹出窗口 控件_13                validator.Font.Size = 9;
DIV弹出窗口控件_弹出窗口 控件_13                validator.Display = ValidatorDisplay.Dynamic;
DIV弹出窗口控件_弹出窗口 控件_13                if (this.ErrorMessage != null && this.ErrorMessage != "")
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17                DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                    validator.ErrorMessage = this.ErrorMessage;
DIV弹出窗口控件_弹出窗口 控件_42                }
DIV弹出窗口控件_弹出窗口 控件_13                else
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17                DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13                    validator.ErrorMessage = "必填";
DIV弹出窗口控件_弹出窗口 控件_42                }
DIV弹出窗口控件_弹出窗口 控件_13                this.Controls.Add(validator);
DIV弹出窗口控件_弹出窗口 控件_42            }
DIV弹出窗口控件_弹出窗口 控件_13            base.CreateChildControls();
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        /**//// <summary>
DIV弹出窗口控件_弹出窗口 控件_13        /// 实现脚本
DIV弹出窗口控件_弹出窗口 控件_13        /// </summary>
DIV弹出窗口控件_弹出窗口 控件_42        /// <returns></returns>
DIV弹出窗口控件_弹出窗口 控件_13        private string RegSouceScript()
DIV弹出窗口控件_弹出窗口 控件_16DIV弹出窗口控件_弹出窗口 控件_17        DIV弹出窗口控件_弹出窗口 控件_12{
DIV弹出窗口控件_弹出窗口 控件_13            JavaScriptWriter js = new JavaScriptWriter(true);
DIV弹出窗口控件_弹出窗口 控件_13
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  rnd.today=new Date(); ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  rnd.seed=rnd.today.getTime(); ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  function rnd() { ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  rnd.seed = (rnd.seed*9301+49297) % 233280; ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  return rnd.seed/(233280.0); ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  }; ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  function rand(number) { ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  return Math.ceil(rnd()*number); ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  }; ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  function AlertMessageBoxSingleCar(returnValue)");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  {");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  var indexvalue;");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("  if (returnValue!=undefined){ ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    var txtname=document.getElementById('" + _textbox.ClientID + "');");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    var txtid=document.getElementById('" + _hiddenField.ClientID + "');");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    indexvalue=returnValue.indexOf('|');");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    txtname.value = returnValue.substring(0,indexvalue);");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    txtid.value = returnValue.substring(indexvalue+1);");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("   }");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("   }");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("   function OpenPopWinSingleCar()");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("   {");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    showPopWin('" + _strDiglogTitle + "','" + ResolveUrl(_sourceUrl) + "?'+rand(10000000), " + _intDiglogWidth + ", " + _intDiglogHeight + ", AlertMessageBoxSingleCar,true,true);");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("   }");
DIV弹出窗口控件_弹出窗口 控件_13
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine(" function ClearSingleCar()");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine(" { ");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    document.all." + _textbox.ClientID + ".value=\"\";");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine("    document.all." + _hiddenField.ClientID + ".value=\"\";");
DIV弹出窗口控件_弹出窗口 控件_13            js.AddLine(" }");
DIV弹出窗口控件_弹出窗口 控件_13
DIV弹出窗口控件_弹出窗口 控件_13            return js.ToString();
DIV弹出窗口控件_弹出窗口 控件_42        }
DIV弹出窗口控件_弹出窗口 控件_42    }
DIV弹出窗口控件_弹出窗口 控件_272}
控件是已经写好了,但是源页面,还是要通过外面程序提供,我的控件里面都已经写死了,其实也可以给他写个属性
让它可以在外部定义。
接下来就是如果获得源页面的返回值,具体代码如下
DIV弹出窗口控件_弹出窗口 控件_02 //返回值
DIV弹出窗口控件_弹出窗口 控件_02window.returnVal="nosnowwolf";
DIV弹出窗口控件_弹出窗口 控件_02//关闭窗口
DIV弹出窗口控件_弹出窗口 控件_02 window.parent.hidePopWin(true); 
OK,这样就可以了,可能我表达的不是很清楚,希望大家能给点意见,改天把代码放出来