Проверка все еще отображается, хотя отключена - PullRequest
5 голосов
/ 14 февраля 2012

У меня есть пользовательский элемент управления, где у меня есть две панели: одна слева, а другая справа, слева - некоторая информация для выставления счета покупателю, а справа - некоторая информация о доставке, каждое поле в информации о доставке имеет Обязательные для проверки поля, эти панели помещаются в панель обновления. Состояние по умолчанию - обе панели видны, под панелями есть флажок «Доставка такая же, как выставление счетов», когда вы отмечаете ее, панель справа «Панель доставки» исчезает, а затем вы продолжаете.

Проблема : Допустим, я удаляю текст в названии доставки и не щелкаю где-либо еще, затем я на некоторое время отмечаю флажок «То же, что и для выставления счета», он показывает проверку красным цветом, а затем оно исчезает. Я попытался создать функцию, которая отключает валидатор, т. Е.

RequireFieldValidator1.Enabled = false;

Он отлично работает в том смысле, что не показывает проверки до исчезновения панели доставки, но, скажем, я передумал и щелкнул ее еще раз, чтобы отобразить. Теперь, когда я стираю имя на панели доставки и щелкаю где-то еще, он никуда меня не отпускает, но не показывает текст подтверждения.

Итак, я сделал эту логику:

if (ckSameBilling.checked)
{
     RequiredFieldValidator.Enabled = false;
}
else
{
      RequiredFieldValidator.Enabled = true;
}

Но теперь все вернулось к тому же поведению, которое я продемонстрировал выше, очистите Название отгрузки и нажмите кнопку "проверить". Я могу сразу увидеть красный значок подтверждения.

Связанный код

//All this is wrapped in an update panel
<asp:Panel ID="pnl" runat="server"><div>
    asp:TextBox ID="txtShippingFirstName" runat="server" Width="130px" Columns="30"
     MaxLength="100" asp:TextBox><div>

<asp:RequiredFieldValidator ID="Requiredfieldvalidator1" ErrorMessage="Name Required"
    ControlToValidate="txt" 
    runat="server" Display="Dynamic" CssClass="Error">
</asp:RequiredFieldValidator>
</asp:Panel>

<div style="margin-left: 145px;">
    <asp:CheckBox ID="Billing" runat="server" Font-Bold="True"
        Text"Same as Billing" OnCheckedChanged="Billing_CheckedChanged"
        AutoPostBack="True" />
</div>

Codebehind:

protected void Billing_CheckedChanged(object sender, EventArgs e)
{    
    if (Billing.Checked)
    {
        //Disable the shipping fields validations
        DisableEnable(true);
        pnl.Visible = false;
    }
    else
    {
        DisableEnable(false);
        pnl.Visible = true;
    }
}

private void DisableEnable(bool enable)
{
    if (enableFields)
    {
        Requiredfieldvalidator1.Enabled = false;
        //a bunch of required validations below...
    }
    else
    {
        Requiredfieldvalidator1.Enabled = true;
        //a bunch of required validations below..
    }
}

Ответы [ 2 ]

5 голосов
/ 14 февраля 2012

Вы пытались отключить валидаторы в Javascript (не на стороне сервера) перед выполнением обратной передачи UpdatePanel?

Вы можете использовать следующую функцию на стороне клиента для отключения ваших валидаторов:

var yourValidator = document.getElementById('yourValidatorClientID')
ValidatorEnable(yourValidator, false);

Это должно остановить эту «вспышку» проверки. Вы можете основать это на своей CheckBox смене клиента.

Вы также можете включить все свои валидаторы в отдельные группы для каждого раздела, а затем отключить сразу всю группу валидаторов. См. Следующую ветку SO для дополнительной информации:

Включить / отключить средства проверки валидатора asp.net в определенной «ValidationGroup» с помощью jQuery?

0 голосов
/ 14 февраля 2012
private void DisableEnableShippingFieldsValidations(bool enableFields)
{
    if (enableFields)
        ckBilling.CausesValidation = false;
    else
        ckBilling.CausesValidation = true;
}

Используя свойство проверки причин флажка, вы проходите проверку.


Предложение

При выполнении проверок, пожалуйста, используйте свойство Группы проверки для элементов управления для проверки и для кнопки / CheckBox, которая будет выполнять проверку.

...