我有网络应用程序,用户只能从一个表单输入出生日期。我有asp.net验证器以及在调用save方法之前调用的服务器端验证方法。
以下是服务器端验证的代码:
private bool ValidateData(out string error)
{
error = string.Empty;
//Validate Date of Birth
TextBox txtDOB = (TextBox)clientinfo.FindControl("txtDOB");
if (!string.IsNullOrEmpty(txtDOB.Text.Trim()))
{
DateTime dob = Convert.ToDateTime(txtDOB.Text.Trim());
if (dob >= DateTime.Now.Date)
{
error = error + "Client can not be less than 7 years and greater than 100 years old.";
}
else if (dob < DateTime.Now.Date && (DateTime.Now.Date.Year - dob.Year) > 100)
{
error = error + "Client can not be less than 7 years and greater than 100 years old.";
}
}
else
{
error = error + "Please enter date of birth.";
}
return error.Length > 0 ? false : true;
}
有一条记录的出生日期为'07 / 19/2045'(MM / DD / YYYY)。每次我测试,我都可以看到验证工作正常。
我可以从浏览器禁用clint端验证。但有没有办法可以禁用服务器端验证?..
我需要知道错误的条目是如何发生的,以防止任何未来的问题。 如果有任何方式用户可以覆盖服务器验证或我在我的方法中做错了,请告诉我。
答案 0 :(得分:3)
用户无法修改服务器,从String
到DateTime
的转换中可能存在错误。您可以尝试以下方法:
var date = DateTime.Now;
if(DateTime.TryParse(txtAge.Text, out date))
if(date <= DateTime.Now.AddYears(-7) && date >= DateTime.Now.AddYears(-100))
Console.WriteLine("Valid Date");
您需要添加else
语句来实现这些错误,您可能需要进行比较,但这应该是一个很好的起点。
答案 1 :(得分:0)
根据我的说法,无法禁用服务器端验证,因为我看不到任何可能阻止进入此代码的配置条目,我认为只有这样才能处理此问题将dll复制到本地系统并尝试各种场景。关于错误的条目,您可以在另一台计算机或示例控制台应用程序中执行相同的输入,以查看验证的哪一部分失败。希望这会有所帮助。