我有四个具有相同项目/值的下拉列表。我想防止在上传表单时多次选择相同的值。如何使用自定义验证器做到这一点?谢谢!
问问题
1106 次
3 回答
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 函数提供客户端验证。
于 2010-07-28T14:42:52.910 回答
0
这可能不是最佳答案,但您始终可以向每个下拉列表添加一个动作侦听器,以便在下拉列表中的选择更改时调用它。
这样,当第二个下拉列表中的选定元素发生更改时,它会调用其 actionlistener,然后在其中重置其他下拉列表,以便它们不显示该选定值,或者如果可能设置它以便您无法选择该值
或者
当其中一个下拉列表的选择发生更改时,您检查它是否等于其他下拉列表中的其他选定值,如果是,您要么向用户显示一个 msgbox 和/或将选择更改为空白选择或尚未使用的第一个可用值。
于 2010-07-28T14:35:26.600 回答
0
只需对 haveSameValue 函数做一点工作。这似乎对我有用。谢谢你的帮助。
protected bool haveSameValue(string first, string second)
{
if (!string.IsNullOrEmpty(first) & !string.IsNullOrEmpty(second) && first.Equals(second)) {
return first.Equals(second);
}
}
于 2010-07-29T16:53:10.997 回答