【问题标题】:Server side/client side validation .net服务器端/客户端验证.net
【发布时间】:2013-05-08 00:15:11
【问题描述】:

好的,所以我有一个奇怪的问题,我需要如何解决的想法。

我有一个指向 sql 数据库的 vb.net Web 应用程序。有一个表的主键是一个自动递增的整数。

当用户将对象添加到此表时,它当前不会检查其中一个数据行中是否已存在“名字”和“姓氏”。所需的功能补充如下:

1)当用户提交表单时,检查表中是否已经存在这样的记录。

1.1)如果记录不存在继续插入。

2)如果该记录确实存在,则向用户显示该记录存在的警告

2.1)警告应该有两个按钮,“继续”和“取消”

2.1.1)如果用户点击“继续”继续添加重复记录

2.1.2)如果用户点击“取消”停止插入。

我对 Web 开发还比较陌生(一年多一点的经验)。我正在寻找“正确”的方法来做到这一点。这个任务对我来说很难的方面是我必须运行查询,然后可能显示和警告(可能是javascript)。我不确定如何在服务器端验证过程中显示警报。

感谢任何想法或cmets!

谢谢!

【问题讨论】:

    标签: javascript .net validation


    【解决方案1】:

    如果您不允许插入重复项,您可以在数据库中创建唯一索引。但是,您现在可以做的是获取数据库中的记录数,其中 firstname 和 lastname 等于插入。

    在普通 SQL 的情况下,它看起来像 SELECT COUNT(recordID) WHERE firstName = @firstName AND lastName = @lastName;

    或者使用实体框架看起来更容易。无论如何,您的问题是关于“在服务器端验证中间显示警报”。换个角度想。可以将其视为两次检查。

    向您的输入表单添加另一个控件,即提交按钮附近的一个不可见复选框。它应该包含关于用户同意插入重复记录的表达式。 一旦检测到,该记录是重复的,中断验证,并使复选框可见,但提交按钮 - 禁用。当用户选中复选框时,提交按钮应该再次可见。

    现在,由于您要再次进行相同的验证,因此您必须将您的复选框纳入方程式 - 如果它可见并被选中,您不必再检查记录重复,只需提交记录即可。如果您需要重新使用该输入表单,请不要忘记取消选中该复选框并再次使其不可见。

    【讨论】:

      【解决方案2】:

      您在这里要做的是在您的方法中添加一个confirm 参数或类似的东西,如下所示:

      ' This is just pseudocode; I'm guessing you can translate it to
      ' whatever web framework you're using
      Sub InsertRecord(ByVal name() As String, Optional ByVal confirm As Boolean = False)
        If DuplicateRecord(name) And Not confirm
          ' Here's where you would render the page with a confirmation dialog
          RenderViewToRequestConfirmation()
          Return
        End
      
        DoInsertRecord(name)
        RenderViewAfterRecordInserted()
      End
      

      然后在正常情况下,您会从您的前端提交一个请求,该请求将在没有confirm 参数的情况下调用此方法。在重复记录的情况下,服务器将通过请求确认的对话框呈现响应。如果用户单击“是”(或其他),那么前端将发送相同的请求,但这次使用必要的请求参数将confirm 设置为True

      就网络请求而言,此过程可能如下所示:

      | Request Data                             | Response               |
      |------------------------------------------|------------------------|
      | { "name": "M Webster" }                  | Page w/ confirm dialog |
      | { "name": "M Webster", "confirm": true } | Success page           |
      

      【讨论】:

        【解决方案3】:

        我走的路线有点混乱......即使现在我已经开始工作了,但我会在这里解释一下,以防其他人以后可以更好地解释它。

        我在后面的代码中写了一个函数来调用检查数据库是否有重复记录的函数,但是我在函数声明上方添加了这两行代码:

        <System.Web.Services.WebMethod()>
        <System.Web.Script.Services.ScriptMethod()>
        

        然后,我编写了一个 JavaScript 函数,该函数从文本框中获取值并将值传递给后面代码中的该函数。这可以通过后面代码中函数声明上方的那两行以及使用 PageMethods 对象来实现。来自 JavaScript 的实际调用如下所示:

        PageMethods.FunctionName(parameter, function(returnValueFromOtherFunction){ 
            ....function stuff
        });
        

        然后我将 JavaScript 函数分配给 Textbox 中的 onBlur 事件。

        感谢大家的帮助,但我认为这是解决我的问题的最佳方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-20
          • 2017-01-26
          • 2010-09-14
          • 2016-10-16
          • 1970-01-01
          • 2013-10-11
          相关资源
          最近更新 更多