Как установить обязательное поле зависит от условия? - PullRequest
2 голосов
/ 31 марта 2012

Я спрашиваю, возможно ли сделать поле обязательным при следующих условиях: установить обязательное текстовое поле, если другое поле не пустое, иначе оно будет необязательным.

Ответы [ 2 ]

6 голосов
/ 31 марта 2012

Вы можете использовать CustomValidator для этого, но есть кое-что, что вам нужно знать, чтобы заставить его работать.Проблема заключается в том, что если вы установите свойство ControlToValidate в валидаторе, оно будет срабатывать, только если этот элемент управления имеет значение.В вашей ситуации вы хотите проверить его конкретно, если у него нет значения.

Чтобы обойти это, не устанавливайте свойство ControlToValidate в валидаторе.Затем в обработчиках проверки клиента и сервера вам нужно будет получить доступ к обоим текстовым полям напрямую.

В функции проверки клиента вы можете сделать что-то вроде этого:

function OnCustomClientValidate(source, e) {
    e.IsValid = true;
    var otherTextBoxValue = $('#<%=OtherTxtBox.ClientID%>').val().trim();            
    if (otherTextBoxValue == '') {                
        return;
    }
    var controlToValidateValue = $('#<%=TextBoxToValidate.ClientID%>').val().trim();
    if (controlToValidateValue == '') {
        e.IsValid = false;
    }
}

Проверка вашего сервераметод может выглядеть следующим образом:

protected void OnCustomServerValidate(object source, ServerValidateEventArgs e)
{
    e.IsValid = true;
    // Don't validate anything if `OtherTextBox` is empty
    if (OtherTxtBox.Text.Trim() == String.Empty)
    {                
        return;
    }

    // If we got this far then we need to set IsValid to false if the ControlToValidate has no value
    if (TextBoxToValidate.Text.Trim() == String.Empty)
    {
        e.IsValid = false;
    }            
}

и ваш aspx может выглядеть следующим образом:

<asp:TextBox ID="OtherTextBox" runat="server"></asp:TextBox>
<asp:CustomValidator ID="MyCustomValidator" runat="server" ClientValidationFunction="OnCustomClientValidate" OnServerValidate="OnCustomServerValidate" Display="Dynamic" ErrorMessage="Please enter a value"></asp:CustomValidator>
<asp:TextBox ID="TextBoxToValidate" runat="server"></asp:TextBox>

Обратите внимание, что при использовании этого подхода он не будет проверяться, когда (предполагаемый) элемент управлениячтобы быть проверенным теряет фокус, потому что мы не указали этот элемент управления.Таким образом, проверка подлинности на стороне клиента будет выполняться при отправке формы, но обратная передача будет отменена, если проверка завершится неудачей.

1 голос
/ 31 марта 2012

Один из способов выполнить валидацию подобным образом - использовать собственный валидатор. Затем вы можете подключить пользовательский валидатор для выполнения проверки на стороне сервера или на стороне клиента.

Обязательная ссылка MSDN: Как выполнить проверку с помощью пользовательской функции для серверных элементов управления ASP.NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...