在使用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;
}