ASP.NET ValidatorOnChange запускается для DropDownList, даже если по умолчанию CausesValidation имеет значение false - PullRequest
0 голосов
/ 13 февраля 2012

В данном случае используется раскрывающийся список, в котором для AutoPostBack установлено значение true, что обновляет другие элементы на странице.Однако тот же выпадающий список также является частью необходимого элемента в ValidationGroup при нажатии кнопки отправки.

Проблема, с которой мы сталкиваемся, заключается в том, что при изменении выпадающего списка срабатывает ValidatorOnChange, и, следовательно, кратко отображает ошибку передpostback обновляет страницу.

Исправление, которое мы планируем сделать, - удалить функцию ValidatorOnChange для выпадающего списка, но это выглядит странным взломом, поэтому нам интересно, есть ли у кого-нибудь другие предложения.

Вот очень простой список, который демонстрирует проблему:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    private void OnChange(object sender, EventArgs e)
    {
        updateList.Visible = test.SelectedValue == "1";
        updateList2.Visible = test.SelectedValue == "2";
    }

    private void OnSubmit(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {

        }
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList runat="server" ID="test" AutoPostBack="true" OnSelectedIndexChanged="OnChange">
            <asp:ListItem Text="Test" Value="-1" />
            <asp:ListItem Text="Test 1" Value="1" />
            <asp:ListItem Text="Test 2" Value="2" />
            <asp:ListItem Text="Test 3" Value="3" />
        </asp:DropDownList>
        <asp:RequiredFieldValidator ID="DropDownListValidator2" runat="server" ControlToValidate="test"
            ErrorMessage="Please select" InitialValue="-1" ValidationGroup="testGroup" />
        <asp:DropDownList runat="server" ID="updateList" Visible="false" />
        <asp:DropDownList runat="server" ID="updateList2" Visible="false" />
        <asp:Button runat="server" ID="testSubmit" Text="Submit" ValidationGroup="testGroup"
            OnClick="OnSubmit" />
    </div>
    </form>
</body>
</html>

1 Ответ

0 голосов
/ 13 февраля 2012

Следующий блок скрипта jquery должен работать для вас. отключение проверки с помощью ValidatorEnable() при выборе элемента из выпадающего списка сделает трюк

здесь я связываю обработчик изменений с событием на стороне клиента onchange раскрывающегося списка

$("#<%=test.ClientID %>").change(function(){
    ValidatorEnable(DropDownListValidator2, false);

});
...