Запретить одно и то же значение, выбранное в нескольких выпадающих списках - PullRequest
0 голосов
/ 28 июля 2010

У меня есть четыре выпадающих списка с одинаковыми элементами / значениями. Я хочу, чтобы одно и то же значение выбиралось более одного раза при загрузке формы. Как я могу сделать это с помощью специального валидатора? Спасибо!

Ответы [ 3 ]

1 голос
/ 28 июля 2010

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

<asp:CustomValidator ID="dropDownValidation" runat="server" OnServerValidate="dropDownValidation_ServerValidate"
    ErrorMessage="The same value cannot be selected in more than one drop down." />

А затем в коде или теге скрипта.

protected void dropDownValidation_ServerValidate(object sender, ServerValidateEventArgs e)
{
    e.IsValid = !haveSameValue(DropDownList1.SelectedValue, DropDownList2.SelectedValue) &&
                !haveSameValue(DropDownList1.SelectedValue, DropDownList3.SelectedValue) &&
                !haveSameValue(DropDownList1.SelectedValue, DropDownList4.SelectedValue) &&
                !haveSameValue(DropDownList2.SelectedValue, DropDownList3.SelectedValue) &&
                !haveSameValue(DropDownList2.SelectedValue, DropDownList4.SelectedValue) &&
                !haveSameValue(DropDownList3.SelectedValue, DropDownList4.SelectedValue);
}

protected bool haveSameValue(string first, string second)
{
    if (first != null && second != null)
    {
        return first.Equals(second);
    }

    return first == null && second == null;
}

Это, очевидно, может быть доработано, и можно использовать функцию javascript для обеспечения проверки на стороне клиента, если необходимо, используя свойство ClientValidationFunction .

0 голосов
/ 29 июля 2010

Немного поработаю над функцией haveSameValue.Кажется, это работает для меня.Спасибо за вашу помощь.

 protected bool haveSameValue(string first, string second)

{
if (!string.IsNullOrEmpty(first) & !string.IsNullOrEmpty(second) && first.Equals(second)) {
    return first.Equals(second);
}

}

0 голосов
/ 28 июля 2010

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

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

OR

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

...