我试图限制用户输入,以便用户只能向名为 OrderID 的文本框输入数字,并且只能向名为 CustomerName 的文本框输入字母。
是否可以在 Visual Studio Web 应用程序表单中执行此操作?用 C# 编码。如果是这样,我该怎么做?
如果用户在上述实现后尝试输入无效数据类型,我还必须处理异常。
如何才能做到这一点?任何帮助深表感谢!:)
我试图限制用户输入,以便用户只能向名为 OrderID 的文本框输入数字,并且只能向名为 CustomerName 的文本框输入字母。
是否可以在 Visual Studio Web 应用程序表单中执行此操作?用 C# 编码。如果是这样,我该怎么做?
如果用户在上述实现后尝试输入无效数据类型,我还必须处理异常。
如何才能做到这一点?任何帮助深表感谢!:)
对文本使用正则表达式使用它- ^[a-zA-Z]*$
.
使用 CompareValidator,用于数字
<asp:TextBox ID="txt" runat="server />
<asp:CompareValidator ID="cv" runat="server" ControlToValidate="txt" Type="Integer"
Operator="DataTypeCheck" ErrorMessage="Value must be an integer!" />
您可以通过扩展 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;
}
您可以使用比较验证器,这是我如何检查数据类型的示例:
<asp:TextBox ID="TextBoxServiceDate" CssClass="OneColumnText" runat="server" Text='<%# Bind("ServiceDate","{0:d}") %>'
ValidationGroup="update"></asp:TextBox>*
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="TextBoxServiceDate"
Display="None" ErrorMessage="<% $resources:AppResource,ServiceDateRequired %>"
ValidationGroup="update"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="CompareValidatorQuantity" runat="server" ControlToValidate="TextBoxServiceDate" ValidationGroup="update" Display="None"
Type="Date" Operator="DataTypeCheck" ErrorMessage='<% $Resources:AppResource,NotValidDateTime %>' />
<br />
在此示例中,有两个验证器。第一个仅用于检查必填字段,第二个用于检查数据类型,在本例中为日期。当然,如果需要,您也可以检查数字,您还可以使用自定义验证器来满足更复杂的需求。这看起来像这样:
<asp:CustomValidator ID="CustomValidatorDate1" runat="server" ControlToValidate="DateFromTextBox"
ErrorMessage='<% $resources:AppResource,NotValidDateTime %>' Display="Dynamic"
onservervalidate="CustomValidatorDate1_ServerValidate"></asp:CustomValidator>
和处理程序...
protected void CustomValidatorDate1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (!string.IsNullOrEmpty(args.Value))
{
DateTime d = new DateTime();
if (!DateTime.TryParse(args.Value, out d))
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}
else
{
args.IsValid = true;
}
}
要显示验证消息,您可以使用动态模式或只是验证摘要,如下所示:
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="Insert" />