【发布时间】:2012-11-20 00:18:45
【问题描述】:
我正在从 Web 表单获取用户输入,如下所示:
Dim t_ResolvedID As TextBox = DirectCast(gvrow.FindControl("editResolved"), TextBox)
Dim t_CommentsID As TextBox = DirectCast(gvrow.FindControl("editComments"), TextBox)
我想将可接受的输入限制如下:
- t_ResolvedID 只能是正整数(无字母)
- t_CommentsID 不应超过 4000 个字符。此外,如果 t_CommentsID.Text 包含单引号,请将其替换为两个单引号
到目前为止,我正在执行以下错误处理:
If IsNumeric(t_ResolvedID.Text) Then
resolved = Integer.Parse(t_ResolvedID.Text)
Else
ShowMessage("Error! Invalid character in 'Resolved' field.")
errorCount += 1
End If
If Integer.Parse(t_ResolvedID.Text) < 0 Then
ShowMessage("Error! 'Resolved' field cannot be negative!")
errorCount += 1
End If
If t_CommentsID.Text.Length > 4000 Then
errorCount += 1
ShowMessage("Error! The 'Comments' field cannot exceed 4000 characters!")
End If
'Transform single quote into two single quotes to avoid SQL errors
If t_CommentsID.Text.Contains("'") Then
comments = t_CommentsID.Text.Replace("'", "''")
End If
If t_CommentsID.Text.Length < 4000 And Not t_CommentsID.Text.Contains("'") Then
comments = t_CommentsID.Text
End If
不过,我觉得有更好的方法来做到这一点。现在,我只保留错误计数,因为我不想使用错误数据执行最终更新 SQL 查询。所以我在运行查询之前检查 errorCount 是否等于 0。我怎样才能提高效率?
我将 AJAX 用于 ShowMessage() 函数,因此我希望尽可能保留通知用户错误的能力。
谢谢!
编辑:我最终修改我的代码如下:
If Not IsNumeric(t_ResolvedID.Text) Then
errors += "Error! Invalid character in 'Resolved' field<br/>"
Else
resolved = Integer.Parse(t_ResolvedID.Text)
If resolved < 0 Then
errors += "Error! 'Resolved' field cannot be negative!<br/>"
Else
resolved = t_ResolvedID.Text
End If
End If
If t_CommentsID.Text.Length > 4000 Then
'errorCount += 1
errors += "Error! 'Comments' field cannot exceed 4000 characters!<br/>"
End If
'Transform single quote into two single quotes to avoid SQL errors
If t_CommentsID.Text.Contains("'") Then
comments = t_CommentsID.Text.Replace("'", "''")
End If
If t_CommentsID.Text.Length < 4000 And Not t_CommentsID.Text.Contains("'") Then
comments = t_CommentsID.Text
End If
【问题讨论】:
-
我没有发现你的代码有什么问题。您应该重用“已解决”,而不是在第二次测试中再次解析字符串。您可能希望连接所有消息并在最后一起显示它们。您可能还想查看一些验证控件以获得更专业的外观,但您可能会花费数天时间,不确定您的目标受众是什么。
-
优秀。谢谢你。显然,解析一次字符串会带来更好的性能,我会做出改变。此外,连接字符串然后在最后显示它们是一个好主意。但是,验证控件是什么意思?我的目标受众主要是会计师,该网站基本上从数据库中获取数字,进行一些数学运算,然后在 GridView 中将其输出给用户。
-
太棒了。谢谢你的资源。我对 ASP.NET 相当陌生,所以这对我来说是新的。我的最后一个问题——如果用户输入一个十进制数字,它会产生一个异常,因为我正在尝试使用
Integer.Parse()。我宁愿只处理错误。无论如何在我修改的代码中解释这一点?