【问题标题】:Validator for drop down list in asp.netasp.net 中下拉列表的验证器
【发布时间】:2011-02-23 09:27:00
【问题描述】:

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

<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>

我在每次选择时都收到错误消息,除了第一个是 -- Please Select -- 。

请告诉我如何验证下拉列表的第一项

第 2 期

我收到两条消息,一条在下拉列表下[显示红色错误“Carson63000”],一条弹出[验证器调用]。相同的消息。 我希望只有验证器标注应该显示消息。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 它工作正常。谢谢。但我收到双重信息。一个来自标注扩展器,一个在下拉列表中。我只想显示一次消息。
    • @Chris,恐怕我从未使用过 ValidatorCalloutExtender。那是 ASP.NET AJAX 的事情,对吧?您是否尝试将 Display="None" 添加到 CompareValidator 中?
    • 请注意,如果要比较的值是空字符串,则必须使用必填字段验证器(请参阅msdn.microsoft.com/en-us/library/db330ayw(v=vs.71).aspx
    • 谢谢,这对我有帮助。不知道在 value 属性中放置一个空值会触发 RequiredFieldValidator。干杯。
    【解决方案2】:

    更改运算符值:

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

    【讨论】:

      【解决方案3】:

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

      您通常会在 DropDownList 中比较三项内容。

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

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

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

      在验证器中使用 `ValueToCompare' 很棘手,因为您正在比较选定的值,这与索引不同,但有时具有相同的值。 您将看到的内容取决于您为下拉列表创建数据列表的方式。

      • 如果使用 List 类型并将其绑定到 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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        相关资源
        最近更新 更多