好的,所以我有一个奇怪的问题,我需要有关如何解决的想法。
我有一个指向sql数据库的vb.net Web应用程序。有一个主键表是一个自动递增的整数。
当用户向此表添加对象时,它当前不会检查其中一个数据行中是否已存在“名字”和“姓氏”。功能的理想添加如下:
1)当用户提交表单时,请检查表格以查看此类记录是否已存在。
1.1)如果记录不存在,请继续插入。
2)如果该记录确实存在,则向用户显示存在此类记录的警告
2.1)警告应该有两个按钮,“继续”和“取消”
2.1.1)如果用户点击“继续”,请继续并添加重复记录
2.1.2)如果用户点击“取消”,请停止插入。
我对网络开发还是比较新的(有一年多的经验)。我正在寻找“正确”的方法来做到这一点。这个让我很难的任务的方面是我必须运行查询,然后可能显示和警告(可能是javascript)。我不确定如何在服务器端验证过程中显示警报。
感谢任何想法或评论!
谢谢!
答案 0 :(得分:0)
如果您不允许插入重复项,则只需在数据库中创建唯一索引即可。但是,您现在可以做的是获取数据库中的记录数,其中firstname和lastname等于插入。
如果是普通的SQL,它会是这样的 SELECT COUNT(recordID)WHERE firstName = @firstName AND lastName = @lastName;
或者使用Entity Framework看起来更容易。无论如何,你的问题是“在服务器端验证过程中显示警报”。以不同的方式思考它。把它想象成两次检查。
在输入表单中添加另一个控件,在“提交”按钮旁边添加一个不可见复选框。它应该包含关于用户同意插入重复记录的表达式。 一旦检测到,该记录重复,中断验证,并使复选框可见,但提交按钮 - 禁用。当用户选中该复选框时,“提交”按钮将再次显示。
现在,由于您再次进行相同的验证,您必须将您的复选框放入等式中 - 如果它是可见的并且已经检查过,您不必再检查记录重复,只需提交记录即可。如果您需要重新使用该输入表单,请不要忘记取消选中该复选框并再次使其不可见。
答案 1 :(得分: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
参数。在重复记录的情况下,服务器将使用对话框呈现响应以请求确认。如果用户单击“是”(或其他),则前端会发送相同的请求,但这次会带有必要的请求参数,以将confirm
设置为True
。
就网络请求而言,此过程可能如下所示:
| Request Data | Response |
|------------------------------------------|------------------------|
| { "name": "M Webster" } | Page w/ confirm dialog |
| { "name": "M Webster", "confirm": true } | Success page |
答案 2 :(得分:0)
我走的路线有点令人困惑......即使现在我已经开始工作了,但我会在这里解释一下,以防其他人能够在以后更好地解释它。
我在后面的代码中编写了一个函数,它调用了检查数据库中重复记录的函数,但我在函数声明上面添加了这两行代码:
<System.Web.Services.WebMethod()>
<System.Web.Script.Services.ScriptMethod()>
然后,我编写了一个JavaScript函数,它从Textbox中获取值并将值传递给后面的代码中的该函数。这可以通过后面的代码中的函数声明上面的两行和使用PageMethods对象来实现。来自JavaScript的实际调用如下所示:
PageMethods.FunctionName(parameter, function(returnValueFromOtherFunction){
....function stuff
});
然后我将JavaScript函数分配给文本框中的onBlur事件。
感谢帮助人员,但我认为这是解决问题的最佳方式。