<%@ Page Language="C#" EnableEventValidation="false" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
FindBox(this.Controls);
} private void FindBox(ControlCollection cc)
{
foreach (Control c in cc)
{
if (c.HasControls())
{
FindBox(c.Controls);
} if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power"))
{
Response.Write("<li>" + x.Attributes["name"]);
}
}
} }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
</head>
<body>
<form runat="server" id="form1">
<asp:CheckBox ID="CheckBox7" runat="server" name="xxxxx" Text=" xxxxx" />
<asp:CheckBox ID="CheckBox1" runat="server" name="Admin_Power" Text=" 投票1" />
<asp:CheckBox ID="CheckBox2" runat="server" name="Admin_Power" Text=" 投票2" />
<asp:CheckBox ID="CheckBox3" runat="server" name="Admin_Power" Text=" 投票3" />
<asp:CheckBox ID="CheckBox4" runat="server" name="Admin_Power" Text=" 投票4" />
<asp:CheckBox ID="CheckBox5" runat="server" name="Admin_Power" Text=" 投票5" />
<asp:CheckBox ID="CheckBox6" runat="server" name="Admin_Power" Text=" 投票6" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到" />
</form>
</body>
</html>我希望FindBox这个方法带返回值
我现在改成protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(FindBox(Page.Controls));
} private string FindBox(ControlCollection cc)
{
string str="";
foreach (Control c in cc)
{
if (c.HasControls())
{
FindBox(c.Controls);
}
if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power") && x.Checked==true)
{
str += "ss";
}
}
}
return str;
}
改成这样后 程序就永远返回空 我知道问题出在递归
if (c.HasControls())
{
FindBox(c.Controls);
}这里,如何改?
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
FindBox(this.Controls);
} private void FindBox(ControlCollection cc)
{
foreach (Control c in cc)
{
if (c.HasControls())
{
FindBox(c.Controls);
} if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power"))
{
Response.Write("<li>" + x.Attributes["name"]);
}
}
} }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
</head>
<body>
<form runat="server" id="form1">
<asp:CheckBox ID="CheckBox7" runat="server" name="xxxxx" Text=" xxxxx" />
<asp:CheckBox ID="CheckBox1" runat="server" name="Admin_Power" Text=" 投票1" />
<asp:CheckBox ID="CheckBox2" runat="server" name="Admin_Power" Text=" 投票2" />
<asp:CheckBox ID="CheckBox3" runat="server" name="Admin_Power" Text=" 投票3" />
<asp:CheckBox ID="CheckBox4" runat="server" name="Admin_Power" Text=" 投票4" />
<asp:CheckBox ID="CheckBox5" runat="server" name="Admin_Power" Text=" 投票5" />
<asp:CheckBox ID="CheckBox6" runat="server" name="Admin_Power" Text=" 投票6" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到" />
</form>
</body>
</html>我希望FindBox这个方法带返回值
我现在改成protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(FindBox(Page.Controls));
} private string FindBox(ControlCollection cc)
{
string str="";
foreach (Control c in cc)
{
if (c.HasControls())
{
FindBox(c.Controls);
}
if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power") && x.Checked==true)
{
str += "ss";
}
}
}
return str;
}
改成这样后 程序就永远返回空 我知道问题出在递归
if (c.HasControls())
{
FindBox(c.Controls);
}这里,如何改?
<asp:CheckBox ID="CheckBox7" runat="server" name="xxxxx" Text=" xxxxx" />
<asp:CheckBox ID="CheckBox1" runat="server" name="Admin_Power" Text=" 投票1" />
<asp:CheckBox ID="CheckBox2" runat="server" name="Admin_Power" Text=" 投票2" />
<asp:CheckBox ID="CheckBox3" runat="server" name="Admin_Power" Text=" 投票3" />
<asp:CheckBox ID="CheckBox4" runat="server" name="Admin_Power" Text=" 投票4" />
<asp:CheckBox ID="CheckBox5" runat="server" name="Admin_Power" Text=" 投票5" />
<asp:CheckBox ID="CheckBox6" runat="server" name="Admin_Power" Text=" 投票6" />
我要的结果是" 投票1, 投票2, 投票3, 投票4, 投票5, 投票6"
看一下编译后的Html代码就明白了。 <div> <span name="xxxxx"><input id="CheckBox7" type="checkbox" name="CheckBox7" /><label for="CheckBox7"> xxxxx</label></span> <span name="Admin_Power"><input id="CheckBox1" type="checkbox" name="CheckBox1" /><label for="CheckBox1"> 投票1</label></span> <span name="Admin_Power"><input id="CheckBox2" type="checkbox" name="CheckBox2" /><label for="CheckBox2"> 投票2</label></span> <span name="Admin_Power"><input id="CheckBox3" type="checkbox" name="CheckBox3" /><label for="CheckBox3"> 投票3</label></span> <span name="Admin_Power"><input id="CheckBox4" type="checkbox" name="CheckBox4" /><label for="CheckBox4"> 投票4</label></span> <span name="Admin_Power"><input id="CheckBox5" type="checkbox" name="CheckBox5" /><label for="CheckBox5"> 投票5</label></span> <span name="Admin_Power"><input id="CheckBox6" type="checkbox" name="CheckBox6" /><label for="CheckBox6"> 投票6</label></span> <input type="submit" name="Button1" value="得到" id="Button1" /> </div>
也就是说.Net的CheckBox控件会在外层包个Span,name值赋给它了。
private string FindBox(ControlCollection cc)
{
string str = "";
foreach (Control c in cc)
{
if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power") && x.Checked == true)
{
str += x.Text + ",";
}
} if (c.HasControls())
{
str = FindBox(c.Controls);
}
}
return str;
} protected void Button1_Click(object sender, EventArgs e)
{
string result = FindBox(Page.Controls);
result = result.Substring(0, result.Length - 1);
}
{
string str = string.Empty;
foreach (Control ct in this.form2.Controls)
{
if (ct.GetType().ToString().Equals("System.Web.UI.WebControls.CheckBox"))
{
CheckBox cb = (CheckBox)ct;
if (cb.Checked == true && cb.Attributes["name"] != null && cb.Attributes["name"].Equals("Admin_Power"))
{
str += cb.Text;
}
}
}
return str;
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(FindBox(Page.Controls)); }
{
FindBox(c.Controls);
}
改成:
if (c.HasControls())
{
str += FindBox(c.Controls);
}
<title>无标题页</title>
<script type="text/javascript">
function getData() {
var cbs = document.getElementsByName("Admin_Power");
var result = document.getElementById("divResult"); if (result) {
result.innerHTML = ""; if (cbs)
for (var i = 0; i < cbs.length; i++)
result.innerHTML += cbs[i].checked ? "xx" : "";
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="divResult"></div>
<div>
<asp:CheckBox ID="CheckBox7" runat="server" name="xxxxx" Text=" xxxxx" />
<asp:CheckBox ID="CheckBox1" runat="server" name="Admin_Power" Text=" 投票1" />
<asp:CheckBox ID="CheckBox2" runat="server" name="Admin_Power" Text=" 投票2" />
<asp:CheckBox ID="CheckBox3" runat="server" name="Admin_Power" Text=" 投票3" />
<asp:CheckBox ID="CheckBox4" runat="server" name="Admin_Power" Text=" 投票4" />
<asp:CheckBox ID="CheckBox5" runat="server" name="Admin_Power" Text=" 投票5" />
<asp:CheckBox ID="CheckBox6" runat="server" name="Admin_Power" Text=" 投票6" />
<input id="Checkbox8" type="checkbox" name="Admin_Power" >测试1</input>
<input id="Checkbox9" type="checkbox" name="Admin_Power" >测试2</input>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到" />
<input type="button" onclick="getData()" value="得到" />
</div>
</form>
</body>看看合不全LZ要求,不合要求再想别的方案。
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{ Response.Write(FindBox(Page.Form.Controls));
} private string FindBox(ControlCollection cc)
{
string str = "";
foreach (Control c in cc)
{
if (c.HasControls())
{
FindBox(c.Controls);
} if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power") && x.Checked == true)
{
str += x.Text;
}
}
}
return str;
}</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
</head>
<body>
<form runat="server" id="form1">
<asp:CheckBox ID="CheckBox7" runat="server" name="xxxxx" Text=" xxxxx" />
<asp:CheckBox ID="CheckBox1" runat="server" name="Admin_Power" Text=" 投票1" />
<asp:CheckBox ID="CheckBox2" runat="server" name="Admin_Power" Text=" 投票2" />
<asp:CheckBox ID="CheckBox3" runat="server" name="Admin_Power" Text=" 投票3" />
<asp:CheckBox ID="CheckBox4" runat="server" name="Admin_Power" Text=" 投票4" />
<asp:CheckBox ID="CheckBox5" runat="server" name="Admin_Power" Text=" 投票5" />
<asp:CheckBox ID="CheckBox6" runat="server" name="Admin_Power" Text=" 投票6" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到" />
</form>
</body>
</html>
最核心的地方在Page.Form.Controls 谢谢各位
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(FindBox(Page.Form.Controls));
}
private string FindBox(ControlCollection cc)
{
string str = "";
foreach (Control c in cc)
{
if (c is CheckBox)
{
CheckBox x = c as CheckBox;
//判断名称
if (x.Attributes["name"] != null && x.Attributes["name"].Equals("Admin_Power") && x.Checked == true)
{
str += x.Text;
}
}
}
return str;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
</head>
<body>
<form runat="server" id="form1">
<asp:CheckBox ID="CheckBox7" runat="server" name="xxxxx" Text=" xxxxx" />
<asp:CheckBox ID="CheckBox1" runat="server" name="Admin_Power" Text=" 投票1" />
<asp:CheckBox ID="CheckBox2" runat="server" name="Admin_Power" Text=" 投票2" />
<asp:CheckBox ID="CheckBox3" runat="server" name="Admin_Power" Text=" 投票3" />
<asp:CheckBox ID="CheckBox4" runat="server" name="Admin_Power" Text=" 投票4" />
<asp:CheckBox ID="CheckBox5" runat="server" name="Admin_Power" Text=" 投票5" />
<asp:CheckBox ID="CheckBox6" runat="server" name="Admin_Power" Text=" 投票6" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到" />
</form>
</body>
</html>