public string getValue(CheckBoxList li)
    {
        string text = "";
        for (int i = 0; i < li.Items.Count; i++)
        {
            if (li.Items[i].Selected)
            {
                text = text + li.Items[i].Text;
            }
        }        return text;
       
    }
上边的方法是用来获取CheckBoxList中被选中的复选框的值,当复选框第一次被选中时,
text变量返回的是空值,请各位帮忙看下,问题出在哪里?

解决方案 »

  1.   

    这个函数是没有问题的,就是看你在什么时候调啦,如果你在click事件里调可能有问题,因为先执行你的代码,而此时框还没有选上
      

  2.   

    也许绑定复选框的代码没有在if(!IsPostBack)里面?
      

  3.   

    CheckBoxList里面的数据都是从数据中查出来的,如果代码没有在if(!IsPostBack)里面,
    复选框就不会显示。
      

  4.   

    我将方法在 
    protected void list1_SelectedIndexChanged(object sender, EventArgs e)
        {
               }
    里面调用,结果text的值还是为空,不知道它应该在哪里调用才合适?
      

  5.   

    方法在问题里写了,
    调用是在脚本里,
    <script language="javascript" type="text/javascript">
    // <!CDATA[function Submit1_onclick() {
    var text = "<%=getValue(list1)%>";
    if(text=="")
    {
    alert('呵呵~您还未做任何选择!');
    }
    else
    {
    alert('恭喜,投票成功!');
    window.open("welcome.aspx");}
    }// ]]>
    </script>
      

  6.   

    绑定的代码必须放到IsPostBack里面,否则你永远获取不到他的值,原因很简单,
    你肯定是在按钮里获取他的值,这样每次都会先触发Page_Load事件,重新加载一次,
    然后执行按钮事件,而在加载后是没有选中的,所以一直为空
      

  7.   

    我是将绑定的代码放在IsPostBack里面。
      

  8.   

    给个例子你参考一下:前台代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Travel_Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:CheckBoxList ID="CheckBoxList1" runat="server">
            </asp:CheckBoxList>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
        </form>
    </body>
    </html>using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Magic_YJL;public partial class Travel_Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.CheckBoxList1.DataSource = GetTravelTypeInfo("-1");
                this.CheckBoxList1.DataTextField = "name";
                this.CheckBoxList1.DataValueField = "name";
                this.CheckBoxList1.DataBind();
            }
        }    #region 获取旅游主题信息
        protected DataTable GetTravelTypeInfo(string strParentId)
        {
            DataTable dt = null;
            Connection conn = Connection.Current;
            string strSql = "SELECT [name] FROM travelTypes WHERE parentId = {0};";
            try
            {
                dt = conn.GetDataTable(string.Format(strSql, strParentId));
            }
            catch
            {
                return dt;
            }
            finally
            {
                conn.Close();
            }
            return dt;
        }
        #endregion
        protected void Button1_Click(object sender, EventArgs e)
        {
            //你那个方法是正确的,可是系统已经定义了一些属性来获取选中的值
            Response.Write("<script language='javascript'>window.alert('" + this.CheckBoxList1.SelectedItem.Text + "');</script>");
        }
    }
    我这个例子不能执行,原因是你没有"Magic_YJL"程序集,这里只是告诉你怎么实现而已
      

  9.   

    可以搞一个最简单的flag标记.
    但是flag必须为public
    public string flag=string.empty;
      

  10.   

    绑定代码放到
    if (!Page.IsPostBack)
    里试试,应该可以
      

  11.   

    不知道问题解决了没有啊!其实最好的解决方法就是代码调试,一步一步的跟踪,看看到底什么地方出现了问题啊!你最好看看你传入的哪个CheckBoxList是否正确啊!
      

  12.   

    下面是我写的方法:
     public void toupiao(CheckBoxList li)    {
            string str = "";
            str = str + li.SelectedItem.Text;
            if (str == "")
            {
                Response.Write("<script>alert('啊?');</script>");
            }
            else {
                Response.Write("<script>alert('呵呵~');</script>");
            }
        }
    然后在按钮的click事件里面调用,用来判断用户是否选择了Checkboxlist中复选框的。
    当用户选中时可以弹出“呵呵”,但如果不选的话,就会报“未将对象引用设置到对象的实例”错误。
      

  13.   

    肯定了,会“未将对象引用设置到对象的实例”错误,
    原因是没有选中,SelectedItem属性本身就为null,你怎么调用它的属性Text呢?