我很难找到一种合适或优雅的方法来处理服务器端代码中的验证。 目前我正在使用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;
}
问题是验证变得复杂,因为更多的复选框是 检查(换句话说,查看更多上下文)。
我在考虑它 作为一种上帝的方法,无论如何都能提供所有的验证 在页面中的任何按钮都在调用它(我对任何人开放 对这种方法的建议/批评)。
注意:
我知道Requiredfield验证器,由于一些复杂性,我在这里避免它。
答案 0 :(得分:0)
我创建了一个包含对相关控件的引用的类,以及一个Validate()
方法(可以在子类中实现或作为lambda传入)。然后我只是将实例保存在一个集合中,我将迭代调用每个Validate()
。