ASP.net checkboxlist未获取选中的值

时间:2011-06-20 10:11:54

标签: jquery asp.net checkboxlist

我已经检查了所有答案,但我的问题似乎有所不同 - 我有两套复选框列表。启动时,我禁用第二组中的所有复选框。

rotected void exchList_OnDataBound(object sender, EventArgs e)
{
    for (int i = 0; i < exchList.Items.Count; i++)
    {
        exchList.Items[i].Attributes.Add("onclick", "gridCallback();");
        exchList.Items[i].Enabled = false;
    }//end for
}//end exchList_OnDataBound()

选中第一组中的方框可启用另一方框。这是通过jquery完成的。

$('#<%= exchList.ClientID %> input:checkbox').each(function() {
            $label = $(this).parent().children("label").text();
            i = 0;
            while(i < $jsonData.xxx.length)
            {
                if ($(this).attr('disabled'))
            {
                $(this).removeAttr('disabled');
            $(this).attr('checked', 'checked');
                }//end if
            else
            {
                $(this).removeAttr('checked');
                $(this).attr('disabled', 'disabled');
            }//end else
                i++;
            }//end while
    });

当要检查的方框时,在回调期间无法检测到它。

protected void productGrid_OnCustomCallback(object sender,
                        DevExpress.Web.ASPxGridView.ASPxGridViewCustomCallbackEventArgs e)
{
    String markets = "", exchs = "";
    int i;
    for (i = 0; i < marketList.Items.Count; i++)
    {
        if (marketList.Items[i].Selected)
            System.Diagnostics.Debug.WriteLine(marketList.Items[i].Text);
    }//end for

    for (i = 0; i < exchList.Items.Count; i++)
    {
        System.Diagnostics.Debug.WriteLine(exchList.Items[i].Text + " " + exchList.Items[i].Enabled);
    }//end for
}//end productGrid_OnCustomCallback()

即使清楚地选中复选框,也始终不会检查它们。查看firebug显示,因为我禁用并启用了列表项,复选框由DIV封装,这可能导致问题。我在没有禁用/启用的情况下测试了它,并且HTML没有围绕复选框的DIV,现在它正常工作。如何从listitem中获取DIV中的复选框选中值?

2 个答案:

答案 0 :(得分:1)

如果我没记错的话,那就是ASP.net控件的某种错误,如果在页面加载时禁用了复选框,它总是以未选中状态返回,即使你启用它并在客户端检查它。
解决方法是从服务器端发送启用的复选框,并在客户端加载时禁用它们(如有必要)。

恕我直言,一个令人满意的解决方案当然是根本不使用ASP.net控件,因为我发现它们过于复杂和超重。但是,嘿 - 那只是我...

答案 1 :(得分:-1)

尝试使用checkboxlist使用的这些代码。它使用2页。没有jscript代码..希望这有帮助。 第1页cs代码。

Session["checkedarray"] = new string[] { "1.0", "2.0", "3.0" };
            {
                {
                    string[] checkedlist = new string[17];
                    int a = 0;

                    for (int i = 0; i <= 16; i++)
                    {
                        if (cblist1.Items[i].Selected == true)
                        {
                            checkedlist[a] = cbllist1.Items[i].ToString();
                            a = a + 1;
                        }
                    }

                    Session["checkedarray"] = checkedlist;
                    Session["numofchecked"] = a;
                    Response.Redirect("ReportPage2.aspx");
                }
            }

第2页cs代码。

protected void Page_Load(object sender, EventArgs e)
{
    string[] arr = (string[])Session["checkedarray"];

    for (int i = 0; i < int.Parse(Session["numofchecked"].ToString()); i++)
    {
        ColcbList2.Items.Add(arr[i].ToString());
    }
}