Эта порция:
$.get("/CaseHistories/ValidateCardNumber",
{ caseHistoryId: $('#CaseHistory_Id').val(),
cardNumber: $('#CaseHistory_CardNumber').val() },
function(data) { res = data });
//alert(res) => works fine return true/false
return res;
}
асинхронный, он возвращает неопределенное значение, потому что эта функция успеха не запускается до тех пор, пока сервер не ответит данными (независимо от того, насколько быстро это происходит, после того, как ваш JavaScript точно включится). Это нормально, потому что предупреждение происходит позже, потому что оно срабатывает, когда данные возвращаются ... после запуска проверочного кода. Чтобы сделать синхронный обратный вызов, вам нужно сделать это вместо:
function cardNumberCheck(value, element) {
var res;
$.ajax({
async: false,
url: "/CaseHistories/ValidateCardNumber",
data: { caseHistoryId: $('#CaseHistory_Id').val(),
cardNumber: $('#CaseHistory_CardNumber').val() },
success: function(data) { res = data });
}
return res;
}