【问题标题】:Client Side validation causes wrong data to be displayed in ASP.NET客户端验证导致在 ASP.NET 中显示错误的数据
【发布时间】:2011-04-05 06:10:24
【问题描述】:

我真的无法为这个问题想出一个更好的描述性标题......但情况如下:

我有一个包含多个不同输入控件的表单......并且我有两种类型的验证:

  1. 此类型可确保用户输入不违反我的应用程序的约束(必需、最大长度、正则表达式).. 这是在客户端使用 ASP.NET 验证控件完成的.. 并且已强制执行a server side validation

  2. 这种类型在更深层次上工作,例如数据库。它会检查条目是否重复以及任何其他无法在 UI 级别完成的检查。

我使用 ValidationSummary 控件来显示第一种类型的错误,以及第二种类型错误的标签。我尝试在禁用 JavaScript 的情况下对其进行测试,它运行良好,然后我重新打开 JS,*问题来了:*

我首先尝试在 db 层上引发错误(通过输入一个已经存在的名称)并且错误显示在标签上并且一切都很好..现在我尝试从文本框中删除名称并按提交,以便我可以引发必填字段验证器错误,预期输出仅为“此字段为必填项”,但我看到的是“名称已存在”和“此字段为必填项”。

..我认为这是因为当 ASP.NET RequiredValidator 工作时,它不会进行回发,所以数据库层永远不会被验证,甚至不会清除标签!

【问题讨论】:

    标签: javascript asp.net validation webforms


    【解决方案1】:

    听起来您需要添加一些 JavaScript,以便在更改名称或尝试提交表单时隐藏/删除“名称已存在”错误消息。

    【讨论】:

    • 听起来不错,但同时我不能只删除 db 错误消息,因为验证可能会变得更复杂.. 例如 TextBox 可以约束 1. 没有重复(在数据库级别) .. 2. 想不出另一个 Db 错误和 3. 没有空字段 .. 所以如果我只是删除了显示 db 错误的标签,则仍然可能违反 db 规则,用户不会知道! .. 我想我可能需要 JavaScript 连接到 Db 并检查输入的数据是否通过 Db 约束.. 问题再次是我处理 Db 异常的方式
    • 例如,如果名称已经存在,我不会检查数据库。我只是让应用程序正常运行并在它违反唯一约束时处理异常(并且有人告诉我StackOverflow,这是最好的方法,而不是两次连接到数据库)..对不起,我知道这很复杂,但我真的可以在这里使用一点帮助..
    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多