asp.net中下拉列表的验证程序

asp.net中下拉列表的验证程序,asp.net,drop-down-menu,validation,Asp.net,Drop Down Menu,Validation,我有一个从服务器端加载的下拉列表 <asp:DropDownList ID="ddlOne" runat="server" CssClass="dropDrownClass" Width="80%"> 在服务器端,加载下拉列表后,我添加 -请选择- 我想确保如果选中该选项,我将显示错误消息。为此我写了一封信 <asp:CompareValidator ID="CompareValidator1" runat="server"

我有一个从服务器端加载的下拉列表

<asp:DropDownList ID="ddlOne" runat="server"  CssClass="dropDrownClass" Width="80%">
在服务器端,加载下拉列表后,我添加

-请选择-

我想确保如果选中该选项,我将显示错误消息。为此我写了一封信

<asp:CompareValidator ID="CompareValidator1" runat="server" 
                          ControlToValidate="ddlOne" ValueToCompare="-- Please Select --" Operator="Equal"  Type="String"   ErrorMessage="CompareValidator"></asp:CompareValidator>
                        <asp:ValidatorCalloutExtender ID="ValidatorCalloutExtender1" TargetControlID="CompareValidator1" runat="server">
                        </asp:ValidatorCalloutExtender>
但每当我在下拉列表中选择任何内容时,它都会向我显示错误消息。 当我将验证器更改为

<asp:CompareValidator ID="CompareValidator1" runat="server" 
                          ControlToValidate="ddlOne" ValueToCompare="0" Operator="Equal"  Type="Integer"  ErrorMessage="CompareValidator"></asp:CompareValidator>
我在每次选择中都会收到错误消息,但第一次选择是-请选择-

请让我知道如何验证下拉列表的第一项

问题2

我收到两条消息,一条在下拉列表下[红色显示错误Carson63000],另一条作为弹出窗口[验证器调出]。同样的信息。
我希望只有验证器标注才会显示消息。

您的验证器将比较下拉列表中所选项目的值,而不是文本。最简单的方法通常是为Please Select项的值设置一个空字符串,为其他项设置一个非空值,然后只使用RequiredFieldValidator

此外,值为tocompare=-Please Select-和Operator=Equal的CompareValidator意味着:检查下拉列表的值,并验证它是否等于-Please Select-;如果不是,则显示错误。这与您需要的正好相反-如果您想采用使用CompareValidator的方法,则需要将运算符更改为operator=NotEqual。

更改运算符值:


在使用DropDownList项时,需要了解3个基本事项。 下面使用的compare一词是任何逻辑比较,而不是特定于验证器的

在DropDownList中,您通常会比较三件事

选定索引-这是一个基于0的索引,可以在代码中引用

选定值-这是一个整数,不必以0开头或以任何特定顺序。您经常会看到此值表示数据库ID

选定项-这通常是列表中行的可见文本

在验证器中使用“ValueToCompare”是很棘手的,因为您要比较的是所选的值,它与索引不同,但有时具有相同的值。 您将看到的内容取决于如何为下拉列表创建数据列表

如果使用列表类型并将其绑定到下拉列表,则可以将下拉列表的值设置为索引的索引值

如果从DB查询中获得列表,则可以将该值设置为每个项的数据库ID

如果您使用空下拉列表并通过DropDownList.Items.Add填充它,您可能会得到与以下不同的结果: 如果使用现有列表并通过DropDownList.items.Insert添加项目,则可能会发生多种情况。 例如,请查看以下代码:

protected void DetailsView_New_Form_DataBound (object sender, EventArgs e)
        {
            DropDownList webform_type = (DropDownList)DetailsView_New_Form.FindControl("DropDownList_DV_New_webform_type");
            webform_type.Items.Insert(0, new ListItem("--Select--", "0"));
        } 
即使我在下拉列表的索引0处插入-Select,我还是将它的值设置为字符串值0,而不是int值0。它实际上并不是在索引0处插入,而是在-1处插入。在我的场景中,比较工作的唯一方式是如果值tocompare=-1。如果添加到下拉列表中的第一项是选择,则该值将为0。当我把它添加到一个已经绑定的下拉列表中时,0变为-1。因此,此验证器工作:

<asp:RequiredFieldValidator runat="server" ID="webform_type_Validator" CssClass="validator"
ErrorMessage=" *Required!" ControlToValidate="DropDownList_DV_New_webform_type"
InitialValue="0" SetFocusOnError="True" Display="Dynamic" 
ValidationGroup="InsertForm" />

它工作得很好。谢谢但我得到了双重信息。一个来自callout extender,另一个位于dropdownlist下。我只想显示一次消息。@Chris,恐怕我从未使用过验证器扩展程序。这是ASP.NETAjax的东西,对吗?您是否尝试将Display=None添加到CompareValidator中?请注意,如果要比较的值是空字符串,则必须使用必需的字段验证器。请参阅,这对我很有帮助。不知道在value属性中放入空值会触发RequiredFieldValidator。干杯
<asp:RequiredFieldValidator runat="server" ID="webform_type_Validator" CssClass="validator"
ErrorMessage=" *Required!" ControlToValidate="DropDownList_DV_New_webform_type"
InitialValue="0" SetFocusOnError="True" Display="Dynamic" 
ValidationGroup="InsertForm" />