<%@ 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);
}这里,如何改?

解决方案 »

  1.   

    你自己考虑清楚你的需求没,在原来的void FindBox 中,是把所有的CheckBox 都进行处理:转成<Li>;你现在要求返回值,是返回哪一个的?
      

  2.   

    我的需求是将所有name=Admin_Power的CheckBox被选中的所有Text组合在一起
    <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"
      

  3.   

    选中的所有Text组合在一起???没看懂你的意思····
      

  4.   

    其实LZ思路没问题,
    看一下编译后的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值赋给它了。
      

  5.   


    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);            
            }
      

  6.   

    注意结贴率private string FindBox(ControlCollection cc)
        {
            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));    }
      

  7.   

              if (c.HasControls())
              {
                  FindBox(c.Controls);
              }
    改成:
                if (c.HasControls())
              {
                  str += FindBox(c.Controls);
              }
      

  8.   

    Response.Write(FindBox(Page.Form.Controls));将FindBox(Page.Controls)改为FindBox(Page.Form.Controls))就可以了
      

  9.   

    解决方案一:改用Html控件,用JS控制:<head runat="server">
        <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要求,不合要求再想别的方案。
      

  10.   

    <%@ 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)
        {        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>
      

  11.   

    哇塞这么多热心的人啊 我感谢你们所有人 
    最核心的地方在Page.Form.Controls 谢谢各位
      

  12.   

    这样 我公布一个我认为比较好的答案吧<%@ 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)
        {
            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>