以后再扩展其他功能,如正则表达式的验证,输入匹配等功能!那就开始吧!
首先我们建一个类库命名为Ajax.MyControls,然后新建一个类文件,我们命名为MyTextBox,再建立一个MyTextBox.js并将其文件嵌入资源.
接着开始我们的打造之路。打开MyTextBox类,
引入下列命名空间。
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Security.Permissions;
using System.ComponentModel;
using System.Diagnostics;
using System.Web.UI.WebControls;
不好意思,来到这里我插入不了代码,点那按钮N久没出来,只能这样帖出来了,看起来比较痛苦!没办法!
[assembly: WebResource("Ajax.MyControls.MyTextBox.js", "text/javascript")]
namespace Ajax.MyControls
{
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[ToolboxData("<{0}:MyTextBox runat=\"server\"></{0}:MyTextBox>")]
public class MyTextBox:Control,IScriptControl
{
public MyTextBox()
{
}
}
}
Control,IScriptControl
下面开始定义改控件的属性
#region 所有属性
[Category("样式")]
[DefaultValue("textbox")]
[Description("控件的样式")]
public string CssClass
{
[DebuggerStepThrough()]
get
{
object obj = ViewState["cssClass"];
return (obj == null) ? "textbox" : (string)obj;
}
[DebuggerStepThrough()]
set
{
ViewState["cssClass"] = value;
}
}
[Category("样式")]
[DefaultValue("textbox")]
[Description("控件高亮时的样式")]
public string HighLightCssClass
{
[DebuggerStepThrough()]
get
{
object obj = ViewState["HighLightCssClass"];
return (obj == null) ? "HighLight" : (string)obj;
}
[DebuggerStepThrough()]
set
{
ViewState["HighLightCssClass"] = value;
}
}
[Category("高级")]
[DefaultValue("")]
[Description("控件的文本值")]
public string Text
{
[DebuggerStepThrough()]
get
{
object obj = ViewState["Text"];
return (obj == null) ? string.Empty : (string)obj;
}
[DebuggerStepThrough()]
set
{
ViewState["Text"] = value;
}
}
#endregion
下面重写方法
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")]
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
if (scriptManager == null)
{
throw new InvalidOperationException("页面必须存在一个ScriptManager控件.");
}
scriptManager.RegisterScriptControl(this);
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
if (!string.IsNullOrEmpty(this.Text))
{
writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
}
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
if (!string.IsNullOrEmpty(this.HighLightCssClass))
{
writer.AddAttribute("onfocus", "this.className ='" + this.HighLightCssClass + "'; ");
} //在这里我们设置获取鼠标事件时显示高亮的样式
if (!string.IsNullOrEmpty(this.CssClass))
{
writer.AddAttribute("onblur", "this.className = '" + this.CssClass + "'; ");
}//在这里我们设置失去鼠标事件时显示原来的样式
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();
if (!this.DesignMode)
{
ScriptManager.GetCurrent(this.Page).RegisterScriptDescriptors(this);
}
}
public IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
ScriptControlDescriptor desc = new ScriptControlDescriptor(this.GetType().FullName, this.ClientID);
if (!string.IsNullOrEmpty(Text))
{
desc.AddProperty("Text", Text);
}
yield return desc;
}
public IEnumerable<ScriptReference> GetScriptReferences()//这里记得发布脚本资源
{
yield return new ScriptReference(this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "Ajax.MyControls.MyTextBox.js"));
}
基本上这个类就完成了!
开始JS的编写。
Type.registerNamespace('Ajax.MyControls');
Ajax.MyControls.CuteTextBox = function(element)
{
this._cssClass = '';
this._Text = '';
this._HighLightCssClass='';
Ajax.MyControls.MyTextBox.initializeBase(this, [element]);
}
声明属性
Ajax.MyControls.prototype=
{
get_cssClass : function()
{
if (arguments.length !== 0) throw Error.parameterCount();
return this._cssClass;
},
set_cssClass : function(value)
{
var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
if (e) throw e;
if (this._cssClass != value)
{
this._cssClass = value;
this.raisePropertyChanged('cssClass');
var target = this.get_element();
if (!Sys.UI.DomElement.containsCssClass(target, value))
{
Sys.UI.DomElement.addCssClass(target, value);
}
}
},
。。。。。。。。。。。。下面的这些属性就不写了,都是一样的,无非就是get,set
}
到了后面别忘了注册咯。
Ajax.MyControls.MyTextBox.registerClass('Ajax.MyControls.MyTextBox', Sys.UI.Control);
if (typeof(Sys) != 'undefined')
{
Sys.Application.notifyScriptLoaded();
}