0

Ok, so I have a kind of weird problem that I need ideas on how to solve.

I have a vb.net web application that points to a sql database. There's a table with a primary key that is an auto-incremented integer.

When a user adds an object to this table, it doesn't currently check to see if the "First Name" and "Last Name" already exist in one of the datarows. The desired addition to the functionality is as follows:

1)When the user submits the form, check the table to see if such a record already exists.

1.1)If the record doesn't exist proceed with the insert.

2)If that record does exist, display a warning to the user that such a record exists

2.1)The warning should have two buttons, "Continue" and "Cancel"

2.1.1)If the user clicks "Continue" go ahead and add the duplicate record

2.1.2)If the user clicks "Cancel" stop the insert.

I'm still relatively new to web development (a little over a year of experience). I am looking for the "correct" way to do this. The aspect of this task that is making it hard for me is that I have to run the query, and then possibly display and alert (javascript probably). I'm not sure how to display an alert in the middle of the server side validation.

Any ideas or comments are appreciated!

Thanks!

4

3 回答 3

0

您在这里要做的是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参数的情况下调用此方法。在重复记录的情况下,服务器将通过请求确认的对话框呈现响应。如果用户单击“是”(或其他),那么前端将发送相同的请求,但这次将必要的请求参数设置confirmTrue.

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

| Request Data                             | Response               |
|------------------------------------------|------------------------|
| { "name": "M Webster" }                  | Page w/ confirm dialog |
| { "name": "M Webster", "confirm": true } | Success page           |
于 2013-05-08T12:56:14.653 回答
0

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

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

或者使用 Entity Framework 看起来更容易。无论如何,您的问题是关于“在服务器端验证中间显示警报”。换个角度想。把它想象成两张支票。

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

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

于 2013-05-08T02:11:25.937 回答
0

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

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

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

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

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

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

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

于 2013-05-13T22:49:52.000 回答