【问题标题】:Prevent same value chosen in several dropdown lists防止在多个下拉列表中选择相同的值
【发布时间】:2010-07-28 12:47:39
【问题描述】:

我有四个具有相同项目/值的下拉列表。我想防止在上传表单时多次选择相同的值。如何使用自定义验证器做到这一点?谢谢!

【问题讨论】:

    标签: .net drop-down-menu customvalidator


    【解决方案1】:

    我会提倡 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;
    }
    

    这显然可以进一步完善,如果需要,可以使用 ClientValidationFunction 属性使用 javascript 函数提供客户端验证。

    【讨论】:

    • 您好,非常感谢您的帮助。自定义验证器工作正常。我也会听取您的建议并编写客户端验证功能。您能否让我知道您的服务器验证也将如何接受空值?谢谢!
    • 我更新了我的答案以处理空值。请注意,我还没有实际尝试过,所以应该作为参考。
    【解决方案2】:

    这可能不是最佳答案,但您始终可以向每个下拉列表添加一个动作侦听器,以便在下拉列表中的选择更改时调用它。

    这样,当第二个下拉列表中的选定元素发生更改时,它会调用其 actionlistener,然后在其中重置其他下拉列表,以便它们不显示该选定值,或者在可能的情况下设置它以便您无法选择那个值

    当其中一个下拉列表的选择发生更改时,您检查它是否等于其他下拉列表中的其他选定值,如果相等,您要么向用户显示一个 msgbox 和/或更改选择到空白选择或尚未使用的第一个可用值。

    【讨论】:

    • 非常感谢。我不知道 actionlistener 是什么,但如果我发现它比验证器更好,我会研究你的解决方案并实施它。
    【解决方案3】:

    只需在 haveSameValue 函数上做一点工作。这似乎对我有用。感谢您的帮助。

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-14
      • 2011-04-29
      • 2018-01-22
      • 2021-12-14
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      相关资源
      最近更新 更多