请教checkboxlist如何添加Validation

xuhaoumsl 2008-05-22 11:39:37
请教checkboxlist如何添加Validation

在一个gridview中有若干纪录 每一行都有一个checkboxlist有3个item和一个dropdownlist


需要两种validation
1.每一行的checkboxlist至少选中一个
2.每一行的checkboxlist选中的情况根据该行的dropdownlist选的值进行validation 就是说 dropdownlist选1那么该行的checkboxlist只能有一个item被check

小弟试了几种常规方法不适用 哪位大侠能帮着看看 非常感激
...全文
161 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinglecat 2008-05-24
  • 打赏
  • 举报
回复
需求需求

需要什么时候进行验证?单击提交按钮?还是....
Jinglecat 2008-05-24
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Jinglecat/archive/2008/05/24/1206216.html
Jinglecat 2008-05-24
  • 打赏
  • 举报
回复
为了防止绕过客户端验证,应该在服务器端同时实现,这个比较简单
原理是一样的,遍历 GridViewRow

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%--http://topic.csdn.net/u/20080522/23/d04fcb4a-a5de-468a-8167-625c15733bfd.html?seed=1674238168--%>

<script runat="server">

void ShowStudentData()
{
DataTable dt = CreateSampleData();

GridView1.DataSource = dt;
GridView1.DataBind();
}

#region sample data

static DataTable CreateSampleEmptyDataTable()
{
DataTable tbl = new DataTable("Student");

tbl.Columns.Add("StudentNO", typeof(string));
tbl.Columns.Add("FirstName", typeof(string));
tbl.Columns.Add("LastName", typeof(string));
tbl.Columns.Add("Age", typeof(int));
tbl.Columns.Add("Gender", typeof(string));

return tbl;
}

static DataTable CreateSampleData()
{
DataTable tbl = CreateSampleEmptyDataTable();

tbl.Rows.Add("20021342", "Jack", "Wu", 25, "M");
tbl.Rows.Add("20025341", "Jue", "You", 23, "F");
tbl.Rows.Add("20022254", "Viky", "Huang", 24, "F");
tbl.Rows.Add("20022231", "Leo", "Wong", 24, "M");

return tbl;
}

#endregion

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowStudentData();
}
}

protected void Button1_Click(object sender, EventArgs e)
{
// 服务器端验证
int expectedCount = 0;
int actualCount = 0;
foreach (GridViewRow row in GridView1.Rows)
{
expectedCount = actualCount = 0;
DropDownList ddl = row.FindControl("DropDownList1") as DropDownList;
if (ddl == null) continue;
expectedCount = int.Parse(ddl.SelectedValue);
CheckBoxList chkList = row.FindControl("CheckBoxList1") as CheckBoxList;
foreach (ListItem item in chkList.Items)
{
if (item.Selected) actualCount++;
}
if (actualCount != expectedCount)
{
Response.Write(String.Format("<script>alert('第{0}行应该选择{1}个选项,实际选择了{2}个');</" + "script>", (row.RowIndex+1).ToString(), expectedCount.ToString(), actualCount.ToString()));
return;
}
// 业务逻辑代码
// ....
}
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>DEMO17_GridViewDynamicalCreateOnFly</title>
<script type="text/javascript">
// 必须确保在 GridView 模板列中使用的 CheckBoxList1 & DropDownList1 是唯一的,至少不能存在与其他同类型控件ID中
function checkGrid()
{
//debugger;
var grd = document.getElementById('<% =GridView1.ClientID %>');
for(var i = 0; i < grd.rows.length; i++) {
var selects = grd.rows[i].getElementsByTagName("select");
var expectedCount = 0;
var actualCount = 0;
for(var j = 0; j < selects.length; j++) {
if(selects[j].id.indexOf("DropDownList1") > -1) {
expectedCount = parseInt(selects[j].value);
break;
}
}
if(expectedCount == 0) continue;
var inputs = grd.rows[i].getElementsByTagName("input");
for(var k = 0; k < inputs.length; k++) {
if(inputs[k].type == "checkbox" && inputs[k].id.indexOf("CheckBoxList1") > -1 && inputs[k].checked) {
actualCount++;
}
}
if(actualCount != expectedCount) {
return !!alert("第" + i + "行应该选择" + expectedCount + "个选项,实际选择了" + actualCount + "个");
}
}
return true;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>验证GridView中由DropDownList控制CheckBoxList的选择项个数</h3>
<em>必须确保在 GridView 模板列中使用的 CheckBoxList1 & DropDownList1 是唯一的,至少不能存在与其他同类型控件ID中</em>
<br />
<input id="Button2" type="button" value="Redirect" onclick="location.href=location.href;" />
<asp:Button ID="Button3" runat="server" Text="PostBackWithoutClientValidation" OnClick="Button1_Click" />
<asp:Button ID="Button1" runat="server" Text="PostBack" OnClick="Button1_Click" OnClientClick="return checkGrid();" />
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
<asp:ListItem>A</asp:ListItem>
<asp:ListItem>B</asp:ListItem>
<asp:ListItem>C</asp:ListItem>
</asp:CheckBoxList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>


Jinglecat 2008-05-24
  • 打赏
  • 举报
回复
// DEMO,外部提交按钮验证

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%--http://topic.csdn.net/u/20080522/23/d04fcb4a-a5de-468a-8167-625c15733bfd.html?seed=1674238168--%>

<script runat="server">

void ShowStudentData()
{
DataTable dt = CreateSampleData();

GridView1.DataSource = dt;
GridView1.DataBind();
}

#region sample data

static DataTable CreateSampleEmptyDataTable()
{
DataTable tbl = new DataTable("Student");

tbl.Columns.Add("StudentNO", typeof(string));
tbl.Columns.Add("FirstName", typeof(string));
tbl.Columns.Add("LastName", typeof(string));
tbl.Columns.Add("Age", typeof(int));
tbl.Columns.Add("Gender", typeof(string));

return tbl;
}

static DataTable CreateSampleData()
{
DataTable tbl = CreateSampleEmptyDataTable();

tbl.Rows.Add("20021342", "Jack", "Wu", 25, "M");
tbl.Rows.Add("20025341", "Jue", "You", 23, "F");
tbl.Rows.Add("20022254", "Viky", "Huang", 24, "F");
tbl.Rows.Add("20022231", "Leo", "Wong", 24, "M");

return tbl;
}

#endregion

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowStudentData();
}
}

protected void Button1_Click(object sender, EventArgs e)
{

}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>DEMO17_GridViewDynamicalCreateOnFly</title>
<script type="text/javascript">
// 必须确保在 GridView 模板列中使用的 CheckBoxList1 & DropDownList1 是唯一的,至少不能存在与其他同类型控件ID中
function checkGrid()
{
//debugger;
var grd = document.getElementById('<% =GridView1.ClientID %>');
for(var i = 0; i < grd.rows.length; i++) {
var selects = grd.rows[i].getElementsByTagName("select");
var expectedCount = 0;
var actualCount = 0;
for(var j = 0; j < selects.length; j++) {
if(selects[j].id.indexOf("DropDownList1") > -1) {
expectedCount = parseInt(selects[j].value);
break;
}
}
if(expectedCount == 0) continue;
var inputs = grd.rows[i].getElementsByTagName("input");
for(var k = 0; k < inputs.length; k++) {
if(inputs[k].type == "checkbox" && inputs[k].id.indexOf("CheckBoxList1") > -1 && inputs[k].checked) {
actualCount++;
}
}
if(actualCount != expectedCount) {
return !!alert("第" + i + "行应该选择" + expectedCount + "个选项,实际选择了" + actualCount + "个");
}
}
return true;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>验证GridView中由DropDownList控制CheckBoxList的选择项个数</h3>
<em>必须确保在 GridView 模板列中使用的 CheckBoxList1 & DropDownList1 是唯一的,至少不能存在与其他同类型控件ID中</em>
<br />
<input id="Button2" type="button" value="Redirect" onclick="location.href=location.href;" />
<asp:Button ID="Button1" runat="server" Text="PostBack" OnClick="Button1_Click" OnClientClick="return checkGrid();" />
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
<asp:ListItem>A</asp:ListItem>
<asp:ListItem>B</asp:ListItem>
<asp:ListItem>C</asp:ListItem>
</asp:CheckBoxList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
xuhaoumsl 2008-05-23
  • 打赏
  • 举报
回复
谢谢大家意见 小弟自己写了backend的validation,看来frontend做还真有点麻烦
xiaoqhuang 2008-05-23
  • 打赏
  • 举报
回复
这个没现成的,自己手写javascript验证函数.
飘_飘 2008-05-23
  • 打赏
  • 举报
回复
你判断的逻辑应该是这样:
1)dropdownlist必须有选择项且值>=1
2)checkboxList 选中item的个数与dropdownlist选择到的值相关联

用js即可实现
xuhaoumsl 2008-05-23
  • 打赏
  • 举报
回复
找到一个第三方的dll http://aspnet.4guysfromrolla.com/articles/092006-1.aspx 最下面Attachments
可以下载到


但是对于我的问题我试了不知道怎么样给每个gridrow根据dropdownlis选的不同的值设置这个CheckBoxListValidator中 MinimumNumberOfSelectedCheckBoxes得值 哪位大侠帮忙看看
amandag 2008-05-23
  • 打赏
  • 举报
回复
通常用js实现

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧