我有一个包含一些项目的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插入。
有人可以帮我解决一下我在这里可能缺少的东西吗?非常感谢你阅读。
答案 0 :(得分:2)
尝试以下方法:
删除ddlType_Load
事件中的代码。而是将该代码放在ddlType_SelectedIndexChanged
事件中。
在Page_load
事件中,修改代码,以便仅在ddlType
时填充Page.IsPostBack = False
。
在ASPX中,将“初始值”属性添加到RequiredFieldValidator
。例如,<asp:RequiredFieldValidator InitialValue="-- Select --" .../>
在ASPX中,将自动回发后属性添加到ddlType
控件。例如<asp:DropDownList AutoPostBack = "true" ...></asp:DropDownList>
页面无效的原因是因为在页面加载时重新填充(或重置)了ddlItems下拉列表(这是必填字段)。