即使选择了DropDownList中的项,DropDownlist的RequiredFieldValidator也会触发

时间:2013-11-25 16:46:30

标签: asp.net vb.net validation requiredfieldvalidator

我有一个包含一些项目的DropDownList。我想使用RequiredFieldValidator验证此控件。我的ASP.NET代码如下所示:

<asp:DropDownList runat="server" ID ="ddlType"></asp:DropDownList>
<asp:DropDownList runat="server" ID ="ddlItems"></asp:DropDownList>
<asp:RequiredFieldValidator ID="valType" runat="server" ControlToValidate="ddlItems" Display="Dynamic" ErrorMessage="* Please select an option"></asp:RequiredFieldValidator>
<asp:Button ID="btnSubmit" runat="server" text="Save" />

我在CodeBehind中的Page_Load函数是这样的:

    With ddlType
        .Items.Add(New ListItem("-- Select --", "-- Select --"))
        .Items.Add(New ListItem("Grocery", "10"))
        .Items.Add(New ListItem("Stationery", "30"))
    End With  

我有另一个函数根据第一个下拉列表中的选择加载第二个下拉列表:

Protected Sub ddlType_Load(sender As Object, e As System.EventArgs) Handles ddlType.Load
    If ddlType.SelectedValue = "10" Then
        With ddlItems
            .Items.Clear()
            .Items.Add(New ListItem("-- Select --", "-- Select --"))
            .Items.Add(New ListItem("Milk", "11"))
            .Items.Add(New ListItem("Eggs", "12"))
            .Items.Add(New ListItem("Cheese", "13"))
            .Items.Add(New ListItem("Bread", "14"))
        End With
    Else
        With ddlItems
            .Items.Clear()
            .Items.Add(New ListItem("-- Select --", "-- Select --"))
            .Items.Add(New ListItem("Pen", "31"))
            .Items.Add(New ListItem("Pencil", "32"))
            .Items.Add(New ListItem("Blank Paper", "33"))
            .Items.Add(New ListItem("Ruled Paper", "34"))
            .Items.Add(New ListItem("Eraser", "35"))
            .Items.Add(New ListItem("Ruler", "36"))
            .Items.Add(New ListItem("Protractor", "37"))
            .Items.Add(New ListItem("Permanent Markers", "38"))
        End With
    End If
End Sub

以下是我的提交按钮代码:

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
        If Page.IsValid Then
            ' Perform SQL Data inserts here.
        End If
End Sub

每当我尝试提交数据时,即使我在“ddlItems”下拉列表中选择RequiredFieldValidator以外的选项,'* Please select an option'也会显示'-- Select --'错误消息。我试图提交而不选择任何选项,以及选择每个选项后。不知何故,提交按钮的If Page.IsValid条件永远不会有True值,并且永远不会到达SQL插入。

有人可以帮我解决一下我在这里可能缺少的东西吗?非常感谢你阅读。

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

  1. 删除ddlType_Load事件中的代码。而是将该代码放在ddlType_SelectedIndexChanged事件中。

  2. Page_load事件中,修改代码,以便仅在ddlType时填充Page.IsPostBack = False

  3. 在ASPX中,将“初始值”属性添加到RequiredFieldValidator。例如,<asp:RequiredFieldValidator InitialValue="-- Select --" .../>

  4. 在ASPX中,将自动回发后属性添加到ddlType控件。例如<asp:DropDownList AutoPostBack = "true" ...></asp:DropDownList>

  5. 页面无效的原因是因为在页面加载时重新填充(或重置)了ddlItems下拉列表(这是必填字段)。