我有大约6或7个文本框需要进行验证,以确保它们在服务器端代码中不是空的。所以我通常这样做是,逐个检查每个文本框以确保它们不是空的。有没有其他有效的方法来做到这一点?我搜索过SO并发现将所有文本框添加到列表中并使用for each是一种更好的方法。有没有其他方法可以实现这一目标? Thanx提前很多:))
答案 0 :(得分:4)
单独检查每个人:
if (string.IsNullOrEmpty(this.NameTextBox.Text) ||
string.IsNullOrEmpty(this.AddressLine1TextBox.Text) ||
// etc...
)
{
// Handle me
}
或者可能:
void CheckTextBox(TextBox textBox)
{
if (textBox == null)
{
throw new ArgumentNullException("textBox");
}
if (string.IsNullOrEmpty(textBox.Text))
{
// Handle me
}
}
void Validate()
{
CheckTextBox(this.FirstNameTextBox);
CheckTextBox(this.AddressLine1TextBox);
CheckTextBox(this.AddressLine2TextBox);
}
7个文本框确实不是那么多 - 显式检查每个文本框使其保持简单并确保其他人阅读您的代码知道发生了什么,而搞乱集合则添加了另一层间接,并使其略微不那么直接调试。
保持简单!
答案 1 :(得分:1)
我同意Kragen - 由于所有的检查,你的代码可能看起来“很大”,但你真的在写这个程序需要做什么来验证这些东西,所以任何一种聪明的方法都可以减少数量您编写的代码行实际上并没有加快速度。
问题:您是否必须验证服务器上的文本框?如果您只验证文本框不为空,我建议使用客户端验证。这将节省您的服务器时间和带宽,因为在浏览器验证它们不是空的之前,不允许您的用户将表单提交给您的服务器。
您仍然希望在服务器端验证(如果他们没有在浏览器上启用JavaScript或者他们正在尝试某种恶意行为)。
客户端验证的本机ASP.NET方法涉及向ASPX添加ASP.NET验证标记。这实际上非常简单。这是MSDN上的一个例子: http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic3
我已经简化了他们的代码以符合您的要求:
<form runat="server">
<asp:TextBox id="TextBox1" runat="server" />
<asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ErrorMessage="Name is required!" ControlToValidate="TextBox1" />
<asp:TextBox id="TextBox2" runat="server" />
<asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server" ErrorMessage="Address is required!" ControlToValidate="TextBox2" />
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Button"></asp:Button>
</form>