Столкнувшись с проблемой, переносимой сегодня, вам нужно обновить sails-hook-orm до последней версии, например :
"sails-hook-orm": "^2.1.1",
Ваш CustomValidator
будет только стрелять когда TextBox
не пусто.
Если необходимо удостовериться, что это не пусто затем, Вам будет нужен a RequiredFieldValidator
также.
Править:
Если Ваш CustomValidator
указывает ControlToValidate
атрибут (и Ваш исходный пример делает) затем Ваши функции проверки будут только вызваны, когда управление не будет пусто.
Если Вы не указываете ControlToValidate
затем Ваши функции проверки будут вызваны каждый раз.
Это открывает второе возможное решение проблемы. Вместо того, чтобы использовать отдельное RequiredFieldValidator
, Вы могли опустить ControlToValidate
атрибут от CustomValidator
и установите свои функции проверки, чтобы сделать что-то вроде этого:
Клиентский код (JavaScript):
function TextBoxDCountyClient(sender, args) {
var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value;
if (v == '') {
args.IsValid = false; // field is empty
}
else {
// do your other validation tests here...
}
}
Серверный код (C#):
protected void TextBoxDTownCity_Validate(
object source, ServerValidateEventArgs args)
{
string v = TextBoxDTownCity.Text;
if (v == string.Empty)
{
args.IsValid = false; // field is empty
}
else
{
// do your other validation tests here...
}
}
Вы проверяли, что управление, вызывающее сообщение назад, CausesValidation установил на tru и что этому не присвоили группу проверки ему?
Я не уверен, что еще могло бы вызвать это поведение.
Проверка серверной стороны не будет стрелять, если клиентская проверка будет недопустима, обратная передача не, отправляют.
Разве у Вас нет некоторой другой проверки, которая не передает?
Клиентская проверка не выполняется, потому что Вы указали ClientValidationFunction="TextBoxDTownCityClient"
и это будет искать названную функцию TextBoxDTownCityClient
как функция проверки, но имя функции должен быть TextBoxDAddress1Client
(как Вы записали),
Проверка подлинности на стороне клиента вообще не выполнялась в моей веб-форме, и я понятия не имел, почему. Оказывается, проблема в том, что имя функции javascript совпадает с идентификатором элемента управления сервера.
Так что вы не можете сделать это ...
<script>
function vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />
Но это работает:
<script>
function validate_vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />
Я предполагаю, что это конфликтует с внутренним .NET Javascript?
Также убедитесь, что вы не используете группы проверки, так как эта проверка не сработает, если свойство validationgroup было установлено и не было явно вызвано через
Page.Validate({Insert validation group name here});
Используйте это:
<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>
Для проверки пустого поля.
Два валидатора добавлять не нужно!