在使用BootstrapValidator的remote的时候,遇到了两个问题;
1.data传递一直为null
2.后台返回值为true的时候,前台还是按照false处理
第一个问题:
原代码:
usertelephone: {//验证input项:验证规则
message: 'The username is not valid',
validators: {
notEmpty: {//非空验证:提示消息
message: '手机号不能为空'
},
stringLength: {
min: 11,
max: 11,
message: '手机号必须为11位'
},
threshold: 11, //有6字符以上才发送ajax请求,(input中输入一个字符,插件会向服务器发送一次,设置限制,6字符以上才开始)
remote: {//ajax验证。server result:{"valid",true or false} 向服务发送当前input name值,获得一个json数据。例表示正确:{"valid",true}
url: '/Login/CheckUserTelephoneEmail',//验证地址
data:{userTelephone:$('input[name="usertelephone"]').val() }
},message: '手机号已被注册',//提示消息
delay: 2000,//每输入一个字符,就发ajax请求,服务器压力还是太大,设置2秒发送一次ajax(默认输入一个字符,提交一次,服务器压力太大)
type: 'POST'//请求方式
},
原因:
因为在获取数据的时候并不是实时获取的,而是按照一开始页面加载时获取的,所以显然内容为空,传到后台的数据也就是空的。
解决方法:
使用函数获取所需要的值
data:{userTelephone:function() {
return $('input[name="usertelephone"]').val() }
},
第二个问题:
官方文档并没有给出后台需要返回给前台的值有什么要求,经过我的烦恼和测试。
传到前台的必须是Json格式,而且Json格式的内容必须是{valid = true}
原代码:
public JsonResult CheckUserTelephoneEmail(string userTelephone)
{
JsonResult ret = new JsonResult();
ret.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
ret.Data = true;
UserContract contract = LoadService<IUserService>().GetUserContract(userTelephone);
if (contract != null) //手机为空,可以用
{
ret.Data = false;
}
return ret;
}
原因:
JsonReslut.data的内容不是valid=true
解决方法:
//先增加一个内部类
internal class str
{
public bool valid;
}
public JsonResult CheckUserTelephoneEmail(string userTelephone)
{
JsonResult ret = new JsonResult();
str hhh = new str() { valid = true };
ret.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
UserContract contract = LoadService<IUserService>().GetUserContract(userTelephone);
if (contract != null) //手机为空,可以用
{
hhh = new str() { valid = false };
}
ret.Data = hhh;
return ret;
}