0

我试图限制用户输入,以便用户只能向名为 OrderID 的文本框输入数字,并且只能向名为 CustomerName 的文本框输入字母。

是否可以在 Visual Studio Web 应用程序表单中执行此操作?用 C# 编码。如果是这样,我该怎么做?

如果用户在上述实现后尝试输入无效数据类型,我还必须处理异常。

如何才能做到这一点?任何帮助深表感谢!:)

4

3 回答 3

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!" />
于 2012-10-20T13:19:49.120 回答
0

您可以通过扩展 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;
}
于 2012-10-20T13:21:09.160 回答
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 />

在此示例中,有两个验证器。第一个仅用于检查必填字段,第二个用于检查数据类型,在本例中为日期。当然,如果需要,您也可以检查数字,您还可以使用自定义验证器来满足更复杂的需求。这看起来像这样:

    <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" />
于 2012-10-20T13:30:07.153 回答