有一个需求,需要在GridView中批量输入数字!
于是想到封装一个TextBox
代码如下:
public class NumberText : TextBox { private const string SMB_NUMBER_SCRIPT_ID = "{c4f7dcfd-8f9b-4fe8-8bd1-4a8a1f145c0c}"; private const string SMB_NUMBER_SCRIPT_ONLY_HOOK = "return NumberEditor_KeyPress_Handle(this)"; private const string SMB_NUMBER_SCRIPT_ONLY_SCRIPT = "<script language=\"javascript\">\n" + "function NumberEditor_KeyPress_Handle(ctrl)\n{{" + "if(event.keyCode == 13) \n return true;\n" + "if(event.keyCode<48 || event.keyCode>57 )\n" + "return false;\n else \n return true;\n}}" + "</script>"; private void RenderJavscript() { if (!Page.ClientScript.IsClientScriptBlockRegistered(SMB_NUMBER_SCRIPT_ID)) { Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), SMB_NUMBER_SCRIPT_ID, string.Format(SMB_NUMBER_SCRIPT_ONLY_SCRIPT, base.ID)); } } protected override void AddAttributesToRender(HtmlTextWriter writer) { base.AddAttributesToRender(writer); writer.AddAttribute("OnKeyPress", SMB_NUMBER_SCRIPT_ONLY_HOOK); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); RenderJavscript(); } public NumberText() : base() { } }
关键点:第一,不要重复注册脚本,第二:要写在OnPreRender事件中
在引用的Page页面中,可以这样调用
protected override void OnPreLoad(EventArgs e)
{
base.OnPreLoad(e);
NumberText number = new NumberText();
place1.Controls.Add(number);//放在一个PlaceHolder中
}
这样一来, 这个 NumberText只接收数字输入,如果需要小数点,可以再修改代码。不过,这里建议用两个NumberText来拼一个浮点数字,这样很好验证,因为小数字的位置不好固定。当然用正则也可以。
这里给出另外一个例子,首先,客户端验证:
protected void Page_Load(object sender, EventArgs e) { if (!Page.ClientScript.IsClientScriptBlockRegistered("ClientCheck")) { Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "ClientCheck", GetCheckScript()); } if (txtAvePrice != null) { txtAvePrice.Attributes.Add("onblur", "ClientCheckFunction(''" + txtAvePrice.ClientID + "'',6,2)"); } } /**//// <summary> /// 得到一段检测输入是否为有效数据的脚本 /// 使用方法: txtBox..Attributes.Add("onBlur", "ClientCheckFunction(''txtBox'',6,2)"); /// 说明检测的TextBox为 txtBox,并且整数位为6位,小数位为2位 /// </summary> /// <returns></returns> private string GetCheckScript() { return @"<script language=""javascript""&g |