GUI控制验证模式

时间:2013-09-10 17:22:21

标签: c# asp.net asp.net-mvc design-patterns frontend

我很难找到一种合适或优雅的方法来处理服务器端代码中的验证。 目前我正在使用asp.net网站,但是我希望有一个同样适用于MVC的模式。

我发布一个示例/伪代码纯粹是为了描述问题,实际代码差别很大而且非常复杂:

标记代码如下:

    <asp:CheckBoxList ID="CheckBoxList1" runat="server">
        <asp:ListItem>Item1</asp:ListItem>
        <asp:ListItem>Item2</asp:ListItem>
        <asp:ListItem>Item3</asp:ListItem>
    </asp:CheckBoxList>
    <asp:CheckBoxList ID="CheckBoxList2" runat="server">
        <asp:ListItem>Item4</asp:ListItem>
        <asp:ListItem>Item5</asp:ListItem>
        <asp:ListItem>Item6</asp:ListItem>
    </asp:CheckBoxList>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" />

背后的代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
    if (ValidatePage()) {
        //call business layer and do some operation.
    }
}

bool ValidatePage()
{
    int visibility = GetVisibility();
    switch (visibility)
    {
        case 0: //TextBox1.Text can not be empty
        //in case it is found to be empty then return false and print the message in web page
        case 1: //TextBox1.Text can not be empty
        //in case it is found to be empty then return false and print the message in web page
        case 2: // both of textbox1 and textbox2 should not be empty
        //in case they are found to be empty then return false and print the message in web page

    }
    //return true or false as per the above validations
}
int GetVisibility()
{
    //if page is redirected from page1 then return 1
    //if page is redirected from page2 then return 2
    //if page is directly open from homepage then return 0
    return 0;
}

  1. 问题是验证变得复杂,因为更多的复选框是 检查(换句话说,查看更多上下文)。

  2. 我在考虑它     作为一种上帝的方法,无论如何都能提供所有的验证     在页面中的任何按钮都在调用它(我对任何人开放     对这种方法的建议/批评)。

  3. 页面是从头开始的,新功能/控件/验证是 经常补充。
  4. 注意:

    我知道Requiredfield验证器,由于一些复杂性,我在这里避免它。

1 个答案:

答案 0 :(得分:0)

我创建了一个包含对相关控件的引用的类,以及一个Validate()方法(可以在子类中实现或作为lambda传入)。然后我只是将实例保存在一个集合中,我将迭代调用每个Validate()