asp.net下拉列表的验证器

时间:2011-02-23 09:27:01

标签: asp.net drop-down-menu validation

我有一个下载列表,我从服务器端加载。

<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”红色]和一个弹出[验证器呼出]。同样的消息。 我希望只有验证器标注才能显示消息。

3 个答案:

答案 0 :(得分:12)

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

此外,CompareValidator ValueToCompare="-- Please Select --"Operator="Equal"表示:检查下拉列表的值,并验证它是否等于“ - 请选择 - ”;如果没有,则显示错误。这与您需要的完全相反 - 如果您想采用Operator="NotEqual"的方法,则需要将运算符更改为CompareValidator

答案 1 :(得分:1)

更改运算符值:

<asp:CompareValidator ID="CompareValidator1" runat="server" 
     ControlToValidate="ddlOne" ValueToCompare="0" Operator="NotEqual"
     Type="Integer" ErrorMessage="CompareValidator" />

答案 2 :(得分:0)

使用DropDownList项目时,需要了解3个基本知识。 (以下“ compare”一词的使用是任何逻辑比较,而不是Validator专用。)

通常需要在DropDownList中进行三项比较。

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

  2. 选择的值-这是一个整数,不必以0开头或以任何特定顺序排列。您通常会看到此值代表数据库ID。

  3. 所选项目-通常是列表中该行的可见文本。

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

  • 如果您使用列表类型并将其绑定到DropDown,则可以将DropDown的Value设置为索引的索引值。

  • 如果从数据库查询中获得了列表,则可以将“值”设置为每个项目的数据库ID。

  • 如果您获取一个空的DropDown并通过 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。比较在我的方案中起作用的唯一方法是ValueToCompare =“ -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" />