c# - 有更好的方法来处理用户输入验证吗?

标签 c# asp.net validation input error-handling

我有一个由表示、逻辑和数据访问组成的 3 层系统。在我的逻辑层中,我有一个 Validate() 方法,它确保将要转发到数据访问层的数据对于数据库来说是有效的(不允许空值的地方不允许空值,等等)。

最重要的是,在 .aspx 表示层中,我们有一些用户友好的错误检查和验证,直接检查 Web 表单上的控件。我的问题是代码中的 ValidateInput() 方法,它检查控件,它有数百行长,而且维护起来非常烦人。检查数据的代码比实际工作的代码长得多。

我得到的看起来像这样:

        private List<string> ValidateInput()
        {
           List<string> errormessages = new List<string>();

           if (LastNameETextBox.Text.Trim() == String.Empty)
           { 
              errormessages.Add("Last name required."); 
           }

           if (FirstNameETextBox.Text.Trim() == String.Empty)
           { 
              errormessages.Add("First name required."); 
           }

           //etc. etc.
        }

我们在母版页中隐藏了一个样式漂亮的通知框,当我们调用它时,它会从 Visible false 变为 true,从而创建一个覆盖框的“幻觉”。它看起来非常漂亮并且工作得非常好,所以我们想使用它。我们的想法是,我们收集整个表单的所有错误,将它们放入一个列表中,然后将该列表发送到通知框,然后通知框会在一个漂亮的列表中为您提供所有错误。

但是 Validate() 只是大量令人痛苦的“if”语句,而且很难跟踪。这只是输入验证的本质,还是有其他更好的方法来处理这个问题?

最佳答案

我认为您可以使用通用函数来避免使用此类 If 语句。 我的建议是定义一个这样的函数

private List<string> ValidateInput(string ErrorMessage, TextBox txtInput, ValidatationType validationType)
{
    List<string> errormessages = new List<string>();


    if (validatationType  == ValidationType.NoNullValues)
    { 

        if (txtInput.Text.Equals(String.Empty))
            {
                errormessages.Add(ErrorMessage); 
            }

    }

    if (validatationType  == ValidationType.Integer)
    { 

        int number;
        if (Int32.TryParse(value, out number))
        {
            errormessages.Add(ErrorMessage); 
        }

    }

    // etc. etc.
}

枚举验证类型

enum ValidationType
{
    NoNullValues,
    Integer,
    // etc
}

请修改函数。还检查语法,我正在使用记事本编写代码。 如果您在单独的类中使用所有验证方法,此方法还可以帮助您实现可重用性。

谢谢

关于c# - 有更好的方法来处理用户输入验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511633/

相关文章:

ASP.NET 文件上传

c# - 允许用户在 Razor 中自定义 HTML

javascript - 如何使用 HTML5、JS 或 Angular 验证 Ionic 中的电子邮件?

c# - 如何使 boolean 值表现得像 'latch' ?

c# - 如何在没有第三个变量的情况下交换?

c# - 找到一个 HtmlGenericControl

python - 后续: missing required Charfield in django Modelform is saved as empty string and do not raise an error

c# - 验证动态对象中的属性

c# - MVC 3 如何让用户查看警告/免责声明屏幕

c# - 切换画笔颜色的更好方法?