我似乎无法弄清楚如何在我的表单中触发远程验证。我最终需要做的是在用户点击提交之前验证MySQL数据库中不存在值,这样他们就会立即知道存在问题。目前,我甚至没有尝试与数据库交谈,网络方法只返回false.ToString();
表单验证工作正常,但远程验证从不在后面的代码中触发我的断点,我不知道我缺少什么。以下代码片段已从实际代码中减少(表单上还有六个以上的必需项,但我没有显示它们或与验证它们相关联的JS),但它与我正在使用的代码相同用于概念证明。我正在发送的JSON字符串在AJAX调用中被强制执行,但是一旦我使用它,它将使用实际的用户输入,它将是JSON.stringify-ed。
如果它有用,我可以发布一个小提琴,这样你就可以看到整个代码(显然AJAX不起作用)。
HTML / ASP.NET:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="create._Default" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PCBClient</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link href="Styles/codiqa.ext.min.css" rel="stylesheet">
<link href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" rel="stylesheet">
<link href="http://jquery.bassistance.de/validate/demo/css/screen.css" rel="stylesheet">
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.js"></script>
<script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.js"></script>
<script src="Scripts/codiqa.ext.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.js"></script>
<script src="Scripts/pcbclient.js"></script>
</head>
<body>
<div data-role="page" data-control-title="Create" id="pageCreate" class="events">
<div data-theme="a" data-role="header">
<h2>
Create
</h2>
</div>
<div data-role="content">
<form id="formEvent_create" action="">
<div data-role="fieldcontain" data-controltype="radiobuttons">
<fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
<legend>Type of PCBID Entry:</legend>
<input id="radio1" name="radio_pcbids" value="rdo_pcbid_single" type="radio">
<label for="radio1">Single PCBID</label>
</fieldset>
</div>
<div data-role="fieldcontain" data-controltype="textinput" class="pcbid_selections" tabindex="1">
<label for="pcbid_single">Single PCBID *</label>
<input name="pcbid_single" id="pcbid_single" class="create_group" placeholder="52759" value="" type="text" data-mini="true">
</div>
<div data-role="fieldcontain" data-controltype="textinput" class="eventType" style="display: none;">
<label for="eventType_create"></label>
<input name="eventType_create" id="eventType_create" placeholder="" value="Creation" type="hidden">
</div>
<input type="submit" data-inline="true" data-icon="arrow-l" data-iconpos="left" value="Back" class="back">
<input type="submit" data-inline="true" data-icon="plus" data-iconpos="left" value="Submit">
<input type="submit" data-inline="true" data-icon="delete" data-iconpos="left" value="Clear">
</form>
</div>
<div id="Result">Create</div>
</div>
</body>
</html>
JS(pcbclient.js):
$("#formEvent_create").validate({
submitHandler: function (form, event)
{
console.log($(this));
isFormValid(form, event);
},
rules: {
pcbid_single: {
required: true,
digits: true,
rangelength: [3, 6],
remote: {
url: "Default.aspx/pcbidCheck",
type: "post",
data: '{"pcbid": 52759}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg)
{
$("Result").text("\nThe PCBID does not exist in the database\nThe query returned: " + msg.d);
}
}
}
},
messages: {
pcbid_single: "Please enter a valid PCBID with 3-6 digits."
}
});
代码隐藏(Default.aspx.cs):
using System;
using System.Web.Services;
namespace create
{
public partial class _Default : System.Web.UI.Page
{
[WebMethod]
public static string pcbidCheck(string pcbid)
{
return false.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
更新:我无法在SO或其他来源的任何地方找到这方面的实际示例,我也无法自己解决这个问题,也没有任何支持论坛那里的jQuery Validation似乎响应了帮助请求(除了SO),所以我退回了&amp;踢。我将在Submit上执行两个单独的AJAX调用,一个用于验证PCBID(它是我们的MySQL数据库中的唯一整数值),并且在接收到该回调时,要么处理或不处理具有另一个AJAX调用的后续事件数据取决于第一次AJAX调用的结果。
如果有人读到这个并且有一个使用jQuery验证的远程验证的ASP.NET示例,我很乐意看到它。我仍然非常希望能够进行模糊远程验证,以便用户立即知道他们输入的PCBID整数值是否存在问题。但是,在某些时候我必须继续推进项目,我花了几天时间试图解决这个问题。