Как проверить необходимый текст, если в раскрывающемся списке выбрана опция «Другое»? - PullRequest
6 голосов
/ 11 сентября 2009

У меня на сайте есть следующее.

Источник [DropDownList]

Сайт

Поисковая система

Другое

Другой источник [TextBox]

Я хочу использовать валидаторы ASP.Net (я думаю, что валидатор сравнения), чтобы при выборе «Другое» в раскрывающемся списке без ввода текста запускалась валидация, и страницу нельзя было отправить.

Возможно ли это?

Я пытался установить значение параметра «Другое» в раскрывающемся списке на string.empty и сравнить его с пустым текстовым полем, но это не сработало.

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

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 11 сентября 2009

Ни один из предоставленных ASP.NET средств проверки не позволяет выполнять условную проверку на основе другого элемента управления. Однако вы можете достичь этого, используя CustomValidator, который выполняет проверку на стороне клиента, на стороне сервера или на обоих (как минимум, проверка на стороне сервера рекомендуется). Валидаторы хорошо работают в сочетании с мастерами.

Пример разметки ASP.NET:

    <asp:DropDownList ID="OptionsDropDownList" runat="server">
        <asp:ListItem Text="Website" />
        <asp:ListItem Text="Search Engine" />
        <asp:ListItem Text="Other" />
    </asp:DropDownList>
    <asp:TextBox ID="OtherTextBox" runat="server" />
    <asp:CustomValidator ID="custvOptionsDropDownList" runat="server" ControlToValidate="OptionsDropDownList"
        ValidateEmptyText="true" Display="Dynamic" ClientValidationFunction="validateOtherTextBox"
        ErrorMessage="This field is required!" OnServerValidate="ValidateOtherTextBox" />

Javascript для ClientValidationFunction:

<script type="text/javascript" language="javascript">
    function validateOtherTextBox(event, args) {
        var textbox = document.getElementById('<%= OtherTextBox.ClientID %>').value;
        if (args.Value == 'Other')
            args.IsValid = (textbox != '');
        else
            args.IsValid = true;
    }
</script>

Код для поддержки OnServerValidate:

    protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args)
    {
        if (OptionsDropDownList.SelectedValue == "Other")
        {
            args.IsValid = (OtherTextBox.Text.Trim() != "");
        }
    }

Обратите внимание, что ваш выбор - реализовать все, что вам нужно. Вы можете полностью пропустить проверку Javascript и удалить этот код и атрибут ClientValidationFunction. Также обратите внимание, что Javascript ссылается на целевой элемент управления с помощью свойства ClientID. Это необходимо, так как ASP.NET назначает другой идентификатор при выводе страницы, и вы хотите, чтобы он был предоставлен методу Javascript таким образом (просмотрите источник на странице, и вы увидите, что имя элемента управления префикс и т. д.).

0 голосов
/ 11 сентября 2009

затем вы проверяете, кто выбирает в выпадающем списке, как это

if (ddl.selecteditemindex == 1){
if (txtvalue.text == "")
{
alert('you write something if selected other otherwise choose from a list');
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...