jquery vaildate 插件 remote验证方式应用
环境技术:
Vs2012 ,Asp.Net MVC4.0 , Razor, Jquery 插件 Jquery Vaildation
Jquery Vaildation插件主要是对 页面的表单进行验证
常用的
(1)required:true 必输字段
(2)remote:"@Url.action("actionName","controllerName")" 使用ajax方法调用actionName验证输入值
(3)email:true 必须输入正确格式的电子邮件
(4)url:true 必须输入正确格式的网址
(5)date:true 必须输入正确格式的日期 日期校验ie6出错,慎用
(6)dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性
(7)number:true 必须输入合法的数字(负数,小数)
(8)digits:true 必须输入整数
(9)creditcard: 必须输入合法的信用卡号
(10)equalTo:"#field" 输入值必须和#field相同
(11)accept: 输入拥有合法后缀名的字符串(上传文件的后缀)
(12)maxlength:5 输入长度最多是5的字符串(汉字算一个字符)
(13)minlength:10 输入长度最小是10的字符串(汉字算一个字符)
(14)rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符)
(15)range:[5,10] 输入值必须介于 5 和 10 之间
(16)max:5 输入值不能大于5
(17)min:10 输入值不能小于10
在这里详细说说 remote,并将校验规则写到js代码中,下面请看实例,然后总结:
1.页面Razor引擎 (注意淡黄色代码)
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.0.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js" type="text/javascript"></script>
@using Omega.DataModels
@model RegionQuota
<form action="@Url.Action("saveQuota", "Region")" method="post" id="QuotaForm" >
<table>
<tr>
<td>Region Name: @Html.HiddenFor(q => q.RegionID)</td>
</tr>
<tr>
<td>Year:
</td>
<td>
@if (Model.RegionQuotaID == 0)
{
@Html.DropDownListFor(q => Model.Year, Omega.ORION.DropdownList.DDL_Years())
}
else
{
@Html.DisplayFor(q => Model.Year)
}
</td>
</tr>
<tr>
<td>Month:</td>
<td>
@if (Model.RegionQuotaID == 0)
{
@Html.DropDownListFor(q => Model.Month, Omega.ORION.DropdownList.DDL_Months())
}
else
{
@Html.DisplayFor(q => Model.Month)
}
</td>
</tr>
<tr>
<td>Monthly Adjusted Income Quota: </td>
<td>$ @Html.TextBoxFor(q => Model.AdjustedIncome) </td>
</tr>
<tr>
<td>Adjusted Income Quota Weight: </td>
<td> @Html.TextBoxFor(q => Model.AdjustedIncomeWeight) %</td>
</tr>
<tr>
<td>
<div id="operPanel">
@Html.HiddenFor(q => Model.RegionQuotaID)
<input type="button" value="Cancel" onclick="javascript: history.go(-1)" />
<input type="submit" value="Save" id="btnSave" />
</div>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
$("#QuotaForm").validate({
rules: {
Year: {
required: true
},
Month: {
required: true,
remote: {
url: "@Url.Action("IsExitQuota", "Region")",
type: "post",
dataType: "json",
data: {
RegionID: function () { return $("#RegionID").val(); },
Year: function () { return $("#Year option:selected").text(); },
Month: function () { return $("#Month option:selected").text(); }
}
}
},
AdjustedIncomeWeight: {
range: [0, 100.00]
}
},
messages: {
Month: {
remote: "The month you entered is already in database!"
}
}
});
</script>
2. RegionController 里面对应的 IsExitQuota 方法
//这里需要注意的是,返回值是JsonResult(因为页面remote里面设置的是json数据格式)
public JsonResult IsExitQuota(int RegionID, int Year, int Month)
{
RegionBLL regionBll = new RegionBLL(EFConnectionString);
return Json(regionBll.IsExitQuotaByRegionIDYearMonth(RegionID, Year, Month), JsonRequestBehavior.AllowGet);
}
本实例需求是这样的: 当添加一个RegionQuota时候,一条记录里 不允许 有相同的 Year,相同的Month,相同的RegionID
RegionID为隐藏的值域,Year,Month,分别为可选的年月,当Month失去焦点时,需要异步的去数据库查询,是否存在 RegionID,Year,Month这样的记录,如果存在,就告诉浏览器,不能让表单提交,如果不存在则提交表单
3. Model类(仅供参照)
namespace Omega.DataModels
{
/// <summary>
/// 地区配额
/// </summary>
public class RegionQuota
{
#region Navigation Properties
/// <summary>
/// 区域配额ID
/// </summary>
public virtual int RegionQuotaID { get; set; }
/// <summary>
/// 区域ID
/// </summary>
[Required]
public virtual int RegionID { get; set; }
/// <summary>
/// 调整后的收入
/// </summary>
[Range(0.00, (double)decimal.MaxValue)]
public virtual Nullable<decimal> AdjustedIncome { get; set; }
/// <summary>
/// 调整后的收入份额
/// </summary>
public virtual Nullable<decimal> AdjustedIncomeWeight { get; set; }
/// <summary>
/// 年
/// </summary>
public virtual Nullable<int> Year { get; set; }
/// <summary>
/// 月
/// </summary>
public virtual Nullable<int> Month { get; set; }
#endregion
#region Navigation Properties
/// <summary>
/// 地区
/// </summary>
public virtual Region Region { get; set; }
#endregion
}
}
4.结果:
当 月 下拉框 失去焦点 并且 选中的值发生改变 的时候,浏览器便向服务器发出IsExitQuota 的请求,请求完之后,返回一个json的 bool数据,如果为true,Month这个字段便会校验有效,否则,会 提示:The month you entered is already in database