Невозможно включить / отключить валидатор в элементе управления, встроенном в UpdatePanel - PullRequest
0 голосов
/ 24 марта 2012

Arg.Наследование проектов НАСТОЛЬКО очень весело.Особенно, когда они не работают должным образом, и особенно, когда они содержат UpdatePanels ...

У меня есть элемент управления с адресом доставки внутри UpdatePanel.Мы должны иметь возможность обрабатывать международные адреса, поэтому я сделал одну вещь - показать / скрыть раскрывающийся список Штат в зависимости от того, является ли выбранная страна США или нет.Кроме того, у меня есть RequiredFieldValidator в этом раскрывающемся списке.

Когда пользовательский элемент управления используется на обычной странице в другом месте приложения, все отлично.Тем не менее, в UpdatePanel .NET не видит RFV, хотя JavaScript это делает.

Address.ascx: (snipped)

    <li class="form-list-question question-state">
        <span class="form-label">
          <asp:Label ID="lblState" runat="server" SkinID="FieldLabel" AssociatedControlID="ddlState" Text="State" /></span>
        <asp:DropDownList ID="ddlState" runat="server" SkinID="State" DataSourceID="dsStates" AppendDataBoundItems="true" ViewStateMode="Enabled"
        DataTextField="Name" DataValueField="Abbr" CssClass="required">
            <asp:ListItem Text="" Value=""></asp:ListItem>
        </asp:DropDownList>
        <asp:RequiredFieldValidator ID="rfvState" runat="server" EnableClientScript="true" Display="None" ControlToValidate="ddlState"
        ErrorMessage="State is required." ValidationGroup="Address" />
    </li>

адрес.js: (разрезано)

        function SetFormByCountry() {
    if (isUsTerritory()) {
        $('.question-state').show();
        if ($('#rfvState').length > 0) {
            $('#rfvState').enabled = true;
        }
    } else {
        $('.question-state').hide();
        if ($('#rfvState').length > 0) {
            $('#rfvState').enabled = false;
        }
    }
}

Текущее поведение: если выбрана страна, отличная от США, раскрывающийся список «Состояние» соответствующим образом исчезает, но при отправке формы проверка по-прежнему происходит натеперь скрытый выпадающий список.Ошибки JS не созданы.

Ожидаемое поведение: С учетом вышеописанного сценария RequiredFieldValidator следует отключить, а форму следует опубликовать.

1 Ответ

2 голосов
/ 24 марта 2012

Вы пытались использовать функцию ValidatorEnable ?

Это функция javascript ASP.Net, которую можно использовать для отключения средств проверки на стороне клиента; в вашем примере вы должны иметь возможность сделать следующее в своем клиентском javascript (где вы устанавливаете свойство enabled):

ValidatorEnable(document.getElementById('<%=rfvState.ClientID%>'), false);

Мое единственное другое предложение - запуск асинхронной обратной передачи при изменении страны и удаление стороны сервера проверки состояния.

...