我试图限制用户输入,以便用户只能输入名为OrderID的文本框中的数字,并且只输入名为CustomerName的文本框中的字母。
是否可以在Visual Studio Web应用程序表单中执行此操作?用C#编码。如果是这样,我怎么能这样做?
如果用户在实现上述操作后尝试输入无效的数据类型,我还必须处理异常。
如何做到这一点?任何帮助深表感谢! :)
答案 0 :(得分:0)
使用正则表达式
对于文本使用它 - ^[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!" />
答案 1 :(得分:0)
你可以通过扩展TextBox类来实现这一点,就像这样: 我已经为一个项目做了这个。
在AssemblyInfo.cs类中添加以下行:
[assembly: WebResource("Web.Controls.Javascript.NumberBox.js", "text/javascript")]
C#Class:
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;
}
答案 2 :(得分:0)
您可以使用比较验证器,这是我的示例如何检查数据类型:
<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 />
在此示例中,有两个验证器。第一个用于检查必填字段,第二个用于检查数据类型,在本例中为Date。当然,如果需要,您也可以检查数字,您也可以使用自定义验证器来处理更复杂的要求。这看起来像这样:
<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" />