【问题标题】:How to Validate a textbox+dropdowns in vb for a asp.net form如何在 vb 中为 asp.net 表单验证文本框+下拉菜单
【发布时间】:2011-06-28 08:09:33
【问题描述】:

Previous question which links onto this and has any addition code ref should I forget to link any,如果有人提交此表单并发生错误,我已将其设置为通过电子邮件发送给我电子邮件失败以及输入的内容。

我现在遇到的问题是验证下拉列表和文本框的方式与我使用整数和日期时间字段类似,这样我也可以在电子邮件中显示它们以防出错。

当前整数和日期时间验证

Catch ex As Exception
            lblInformation.Text = ("<h4>Unable to save data in database</h4>" + vbNewLine + "The error was '" + ex.Message + "'" + vbNewLine + vbNewLine + vbNewLine + "The SQL Command which falied was:" + vbNewLine + "<strong>" + mySQL + "</strong>" + vbNewLine).Replace(vbNewLine, "<br />" + vbNewLine)

Dim dtb As DateTime
            If Not DateTime.TryParse(DateOfBirth, dtb) Then
                strEMessageBody.Append("<strong>Date Of Birth:</strong> " & DateOfBirthYear.SelectedItem.Value & "-" & DateOfBirthMonth.SelectedItem.Value & "-" & DateOfBirthDay.SelectedItem.Value & vbCrLf)
                strEMessageBody.Append("<br/>" & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab)
            End If
Dim iao As Integer
            If Not Integer.TryParse(AnyOther, iao) Then
                strEMessageBody.Append("<strong>Any Other:</strong> " & rblAnyOther.Text & vbCrLf)
                strEMessageBody.Append("<br/>" & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab)
            End If

然后在最终验证下方,我有电子邮件设置的 Dim,但我在另一个问题中进行了整理。

问题出现在我之前的页面中

Sub Upload_Click(ByVal source As Object, ByVal e As EventArgs)
    If (Page.IsValid) Then
        Dim Name As String

这阻止了我只使用上面显示的名称,我会改为将它们称为其他名称,但这不适用于字符串,所以我的主要问题是有一些代码来检查字符串是否有效以及下拉菜单这要么工作,但总是在电子邮件中显示数据,要么会在代码中打嗝,

Dim imd As Integer
            If Not Integer.TryParse(dept, imd) Then
                strEMessageBody.Append("<strong>Department:</strong> " & dept.Text & vbCrLf)
                strEMessageBody.Append("<br/>" & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab)
            End If

以下是记录部门的设置方式 部门 = 部门.SelectedItem.Value 部门=替换(部门,“'”,“''”)

总结:- 需要 vb 代码来验证字符串和下拉列表是否有效,使用 try/catch 块是另一种可能的解决方案,但我也无法弄清楚如何实现验证。

【问题讨论】:

  • 如果有人提交了无效的表单,它会向您发送电子邮件吗?这简直太疯狂了...让您的代码处理验证,并让他们仅在页面有效时提交...
  • @Matt 已经是这种情况,但是一个用户遇到错误并且他们没有记录错误详细信息,所以我设置它会通过电子邮件发送给我,原始开发人员会输入所有内容从 1 个巨大的 sql 插入命令中的表单开始,并且基本上对此进行了紧急处理,所以我要问的不是疯狂,而是一种快速诊断问题所在的方法。但是,如果您坚持认为这很疯狂,那么请提出替代方案?
  • 创建一个名为“tblLog”之类的日志表。如果您的应用程序或 SQL 遇到错误,请将异常内容写入日志记录表。
  • 当您说“字符串和下拉菜单有效”时,您到底是什么意思? 1.字符串不应该为null或为空? 2. 下拉菜单应该选择一个值吗? 3. 还有其他验证吗? (请列举)
  • @tzup 以上所有内容以及关于第 3 点的内容,我现在想不出其他任何内容,但如果您知道还有其他合适的验证,那么这些也是。

标签: asp.net vb.net validation


【解决方案1】:

将您的值记录到数据库中。设置一个名为“tblLog”或其他东西的日志记录表。记录 ex.Message 的值,甚至可能是 InnerException(如果存在)。

【讨论】:

  • 好吧,如果表单确实有很多输入或者不是那么旧,我会这样做,但由于在 3 年中它一直在运行,它只使用了 88 次,那么这种方式就好像不是更有效,因为它会立即提醒我或我部门的任何人,如果我对这个验证进行排序,它将从一开始就准确地确定问题是什么,而不是等待谁试图使用表格来响铃并确保他们正在输入正确的信息,因此尽管您的回答对我之前的问题很有用,但它无助于解决当前的验证问题...
  • 立即准确指出哪里存在问题,例如原始开发人员将 DOB 设置为 3 个下拉菜单,这意味着他们可以输入 2 月 31 日,而当它尝试转换时这将是错误的到日期时间。
  • @Myzifer - 如果是这样的话,听起来你真的需要在页面上做一些开发工作。表单应经过验证,但绝不应允许用户输入注定会失败的数据。
  • 在这方面,如果由我决定,我会重新制作整个表单,但这并不是那么简单,因为它是/连接到另一个表单和更大的 Intranet db 的一部分,其他一切都不是我们的一部分责任/领域,在最初的开发人员停止这样做之后,我们只有几件事情需要支持,无论如何要解决手头的问题,你知道我如何设置验证,就像我在我的问题中出现的那样?
【解决方案2】:

结合Matt 的回答,有一个工具可以帮助您将错误自动记录到数据库中。

它叫ELMAH

编辑

以下是您可能想要使用的 2 个验证:

Dim s As String = "some user input in here" 
If [String].IsNullOrEmpty(s) Then
    ' Watch out, string is null or it is an empty string
End If

Dim cb As New ComboBox()    
If cb.SelectedItem Is Nothing Then
    ' Watch out, combo has no item selected
End If

注意 ComboBox 在此示例中是一个 WinForm 控件,但其思想与 ASP.NET 对应项相同

【讨论】:

  • @tzup 能够在此添加类似的内容会很好,但是为什么要在需要护理时使用直升机去当地的商店,我已经设置好了,如果有一个错误和有关它的详细信息,我唯一缺少的一点是能够像我在问题中提到的那样验证字符串和下拉列表,因为现在如果有其他任何问题,那么我会在电子邮件中收到通知,但是如果那些 2事情失败了我不会立即指出他们所以关于验证的任何想法?
  • @Myzifer 我明白你的意思,ELMAH 是下一个项目要记住的东西。至于您的验证问题,我稍后会编辑我的答案。
  • @tzup 原来这整个问题的原因是原始开发人员试图错误地提交 DOB,因此它搞砸了一切,所以我简单地修复了这个问题,没有更多问题,关于验证将 [String] 替换为 say [Name] 这是我的姓名输入字段,然后关于 Dim cb 以及它不会让我重新使用该字段的名称,所以我将如何得到它与字符串验证和关于 Dim random as New ComboBox() If [Dept].SelectedItem(random) 或类似的东西的 int+date 验证相同?
  • 对于字符串,将“s”替换为 [Name]。对于 ComboBoxes,您需要对实际对象的引用,然后 [comboBoxObj].SelectedItem is Nothing 是要走的路。
  • @tzup 我不能用 [Name] 替换 s 我已经解释过它不会让我这样做,因为它与页面上进一步的 Dim Name as String 的使用冲突,因此我需要另一种识别每个单独字符串的方法。它有一个蓝色的名称下划线,当我将鼠标悬停在它上面时,它说(变量“名称”在封闭块中隐藏了一个变量。)。
【解决方案3】:

既然大家都放弃了寻找解决方案,那我就以这篇文章作为答案来结束这个话题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多