检查是否已选中复选框时,我得到一个空对象

时间:2014-01-13 19:54:40

标签: c# asp.net checkbox

我试图通过使用复选框来查看是否已选择行。该行位于ListView内部。我得到了一个空对象错误。

<td>
   <asp:CheckBox id="CheckBox1" runat="server"
                 value='<%# Eval("rdvId") %>'
                 AutoPostBack="true"
                 OnCheckedChanged="Check_Clicked"/>
</td>

protected void Check_Clicked(Object sender, EventArgs e)
{

    int KeyId = 0;

    foreach (ListViewDataItem item in ListView1.Items)
    {
        /*     if (((CheckBox)item.FindControl("MyCheckBox")).Checked) */
        CheckBox myCheckBox = (CheckBox)item.FindControl("MyCheckBox");
        if (myCheckBox.Checked)     //      <===  generate a null object.
        {
            KeyRdvId = Convert.ToInt32(ListView1.DataKeys[item.DataItemIndex].Value); 
               // ( I want to get the key of the selected listview) 
        }
    }
}

我在过程中使用了这段代码protected void btnSubmit_Click(object sender,EventArgs e) 它在那里工作!!!

protected void btnSubmit_Click(object sender, EventArgs e)
{
    int iCptCheckBox = 0;
    int indxChkBox = 0;

    foreach (ListViewDataItem item in ListView1.Items)
    {

        var chk = item.FindControl("MyCheckBox") as System.Web.UI.HtmlControls.HtmlInputCheckBox;
        if (chk != null && chk.Checked)
        {
            indxChkBox = Convert.ToInt32(chk.Value);//  <==== here it is working 

知道为什么它不能在第一个工作吗?

3 个答案:

答案 0 :(得分:3)

您正在寻找ID为MyCheckBox的控件,但如果您查看自己的asp代码,则ID为CheckBox1,请将您的代码更改为以下内容:

    CheckBox myCheckBox = (CheckBox)item.FindControl("CheckBox1");
    if (myCheckBox.Checked)         //  <===  generate a null object.
    {
        KeyRdvId = Convert.ToInt32(ListView1.DataKeys[item.DataItemIndex].Value); 
          //  ( I want to get the key of the selected listview) 
    }

答案 1 :(得分:0)

复选框没有value属性。

根据定义,CheckBox是一个布尔值,由其ID标识。您需要做的就是检查是否已经检查过。

如果您确实需要为复选框指定值,则可以使用InputAttributes

添加:

myChk.InputAttributes.Add("value", "My Value");

访问值:

myChk.InputAttributes["value"];

答案 2 :(得分:0)

我有一次类似的屏幕,我觉得最好处理使用责任分离。换句话说,我做了一个子控件并将其放在列表框中,然后我将一个属性映射到控件,并使控件处理控件所需的逻辑。