#javascript #asp.net #validation #overwrite
#javascript #asp.net #проверка #перезапись
Вопрос:
У меня проблема, которая сводит меня с ума. На моей странице у меня есть одна проверка Javascript и две ASP.NET валидаторы. Результат проверки зависит только от результата Javascript. Это означает, что если Javascript возвращает true, ASP.NET валидаторы не проверяются.
Код Javascript является:
<script type="text/javascript">
function Validate() {
var ddlObj = document.getElementById('<%=ddStatus.ClientID%>');
var txtObj = document.getElementById('<%=txtComment.ClientID%>');
if (ddlObj.selectedIndex != 0) {
if (txtObj.value == "") {
alert("Any change of Status requires a comment!");
txtObj.focus();
return false;
}
}
}
</script>
Вместо двух ASP.NET валидаторы — это:
<td><asp:TextBox runat="server" ID="txtSerialNr" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtSerialNr" ErrorMessage="***" />
</td>
<td><asp:TextBox runat="server" ID="txtProdName" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="txtProdName" ErrorMessage="***"></asp:RequiredFieldValidator></td>
Кто-нибудь может помочь? Спасибо
Обновить:
Я вызываю Javascript с помощью кнопки:
<asp:Button runat="server" ID="btnSubmit" Text="Save New Product"
style="cursor:hand" OnClick="btnSubmit_Click" />
Но я регистрирую атрибут из кода:
protected void Page_Load(object sender, EventArgs e)
{
btnSubmit.Attributes.Add("OnClientClick", "return Validate()");
}
Ответ №1:
Вы можете запустить проверку на стороне клиента из Validate()
функции:
validate = function(){
bool isValid = Page_ClientValidate(""); //triggers validation
if (isValid){
var ddlObj = document.getElementById("<%=ddStatus.ClientID%>");
var txtObj = document.getElementById("<%=txtComment.ClientID%>");
if (ddlObj.selectedIndex != 0) {
if (txtObj.value == "") {
alert("Any change of Status requires a comment!");
txtObj.focus();
isValid = false;
}
}
}
return isValid;
}
Разметка:
<asp:Button runat="server" OnClientClick="return validate();" ... />
Комментарии:
1. Ваше решение казалось идеальным, но оно не работает. Я пробовал много разных комбинаций, но безуспешно. Как я могу проверить, возвращает ли Page_ClientValidate значение true, если я действительно заполняю оба текстовых поля, управляемых ASP.NET валидаторы? Спасибо
2. В какой последовательности вы хотите, чтобы проверка выполнялась?
3. Вы уверены, что это не проблема с корпусом. Моя функция вызывается
validated
, тогда как вашаValidate
. JavaScript очень требователен к корпусу.4. да, я не копировал / вставлял. Я попробовал ваш код, а также свой, написав ‘function Validate ()’. Сходишь с ума
5. Что происходит? Вы превращаете это в функцию? Я бы предложил добавить оповещения по всей функции, чтобы убедиться, что вы выполняете всю логику. Как должна работать проверка? Должен ли он проверять требуемые поля, а затем запускать вашу пользовательскую логику?
Ответ №2:
Хорошо, здесь есть пара ошибок.
Если вы достаточно обеспокоены выполнением проверки, вы всегда должны выполнять проверку на стороне сервера в дополнение к проверке на стороне клиента. Проверка на стороне клиента очень удобна для пользователя и быстро реагирует, но ее можно обойти, просто установив JavaScript в «off»!
Я не вижу, где вы указали своим элементам управления, какую функцию JavaScript вызывать при проверке? Вы используете RequiredFieldValidators
, которые не требуют внешней функции, но затем пытаетесь выполнить пользовательскую проверку с помощью вашей Validate()
функции.
Если вы в конечном итоге используете a CustomValidator
, вам нужно будет изменить «подпись» вашей функции. Он должен иметь вид
function validateIt(sender, args){
var testResult = //your validation test here
args.IsValid = testResu<
}
Комментарии:
1. спасибо за ваш ответ. Я знаю, что это должно сопровождаться проверкой на стороне сервера, но это намного проще выполнить. Я предпочитаю, чтобы работала проверка на стороне клиента, а не реализовывать проверку на стороне сервера. О вашей другой проблеме см. Мое обновление
2. Что вам нужно делать, так это использовать a
CustomValidator
и выполнять всю проверку в этом. Нет смысла иметьRequiredFieldValidator
и пользовательскую проверку.