Repeater控件中DropDownList的RequiredFieldValidator不生效如何解决
修复方法
核心问题点&对应修改方案
- 第一个错误:
ItemDataBound事件逻辑错误
该事件为每绑定一个Repeater项触发一次,不需要遍历所有Repeater项,仅需处理当前触发事件的e.Item即可,同时需要过滤非数据行(页眉、页脚、分隔符等),修改后代码如下:
protected void myRepeter_ItemDataBound(object sender, RepeaterItemEventArgs e) { // 仅处理数据行 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { DropDownList ddlName = e.Item.FindControl("ddl_Name") as DropDownList; RequiredFieldValidator rfvName = e.Item.FindControl("rfv_Name") as RequiredFieldValidator; // 绑定数据后插入默认提示项,确保Value和校验器的InitialValue完全匹配 ddlName.Items.Insert(0, new ListItem("请选择姓名", "0")); ddlName.SelectedIndex = 0; // 校验器和下拉框设置相同校验组 rfvName.ValidationGroup = "valgrp_Name"; ddlName.ValidationGroup = "valgrp_Name"; } }
如果你的默认选项的Value不是0,对应修改InitialValue为实际值即可。
- 第二个常见遗漏:提交按钮未绑定同名校验组
触发提交操作的按钮必须加上相同的ValidationGroup属性,否则点击提交不会触发对应组的校验:
<asp:Button ID="btnSubmit" runat="server" Text="提交" ValidationGroup="valgrp_Name" OnClick="btnSubmit_Click" />
- 第三个可选兜底:服务端主动触发校验
提交逻辑中主动调用校验方法,避免客户端校验被绕过的情况:
protected void btnSubmit_Click(object sender, EventArgs e) { Page.Validate("valgrp_Name"); if (!Page.IsValid) { // 校验不通过直接终止后续逻辑 return; } // 后续正常业务逻辑 }
内容的提问来源于stack exchange,提问作者Bhagyashree
相关产品推荐
相关产品推荐

