您可以通过扩展 TextBox 类来实现这一点,如下所示:
我已经为一个项目完成了这项工作。
在 AssemblyInfo.cs 类中添加这一行:
[assembly: WebResource("Web.Controls.Javascript.NumberBox.js", "text/javascript")]
C# 类:
public sealed class NumberBox : TextBox
{
protected override void OnPreRender(EventArgs e)
{
RegisterIncludeScripts();
this.Attributes.Add("onkeydown", "return NumberBox_KeyDown(this, event);");
this.Attributes.Add("onkeyup", "return NumberBox_KeyUp(this, event);");
this.Attributes.Add("onblur", "NumberBox_Blur(this);");
this.Attributes.Add("onpaste", "NumberBox_Paste(this);");
base.OnPreRender(e);
}
private void RegisterIncludeScripts()
{
this.Page.ClientScript.RegisterClientScriptResource(typeof(TextBox), "Web.Controls.Javascript.NumberBox.js");
}
public int Number
{
get
{
if (this.Text.Equals(String.Empty)) return -1;
else return Convert.ToInt32(this.Text);
}
}
}
JavaScript:
function NumberBox_KeyDown(control, e) {
var keynum = GetKeystroke(e);
if (IsFuncKey(keynum))
return true;
var keychar = String.fromCharCode(keynum);
if (NumberBox_IsExceedingLimit(control, control.value + keychar))
return false;
if (keynum >= 96 && keynum <= 105)
return true;
var numcheck = /\d/;
return numcheck.test(keychar);
}
function NumberBox_KeyUp(control, e) {
var keynum = GetKeystroke(e);
if (IsFuncKey(keynum))
return true;
control.value = control.value.replace(/[^0-9 ]/g, '');
}
function NumberBox_Paste(control) {
control.value = control.value.replace(/[^0-9 ]/g, '');
if (NumberBox_IsExceedingLimit(control)) {
control.value = control.value.substring(0, control.value.length - 1);
}
}
function NumberBox_Blur(control) {
control.value = control.value.replace(/[^0-9 ]/g, '');
if (NumberBox_IsExceedingLimit(control)) {
control.value = control.value.substring(0, control.value.length - 1);
}
}
function NumberBox_IsExceedingLimit(control, value) {
var maxValue = control.attributes["maxValue"].value;
var value = String(value);
if (value.length > maxValue) {
return true;
}
return false;
}
function NumberBox_IsExceedingLimit_IsInsideBoundary(control, value) {
var minValue = control.attributes["minValue"].value;
var maxValue = control.attributes["maxValue"].value;
var value = String(value);
if (value.length >= minValue && value.length <= maxValue) {
return true;
}
return false;
}