ASP.NET:gridview中的复选框,它是modalpopupextender的一部分,检查状态是否未发送到服务器

时间:2016-06-09 09:29:58

标签: c# asp.net gridview updatepanel modalpopupextender

我一直在使用ajax modalpopupextender控件创建网页。我有一个gridview,其中包含一个复选框的itemtemplate。包含gridview的面板中有几个按钮(保存,取消)。弹出窗口正确打开,并且还会调用按钮事件。但是,如果我选中/取消选中任何复选框,然后单击“保存”按钮,则选中状态始终为false。 我一直在网上寻找各种各样的东西。尝试使用触发器无效。我甚至创建了一个单独的演示网页来测试它。到目前为止没有运气。仅供参考,如果我用gridbox或其他东西替换gridview,则在服务器端正确接收该值。哪里可能出错?附件是片段:

<asp:Button ID="exButton" runat="server" Text="Select for BA" />
<ajaxToolkit:ModalPopupExtender ID="ex_ModalPopupExtender" runat="server" BehaviorID="ex_ModalPopupExtender" TargetControlID="exButton" PopupControlID="Pops" BackgroundCssClass="modal-backdrop" CancelControlID="CancelChange">
</ajaxToolkit:ModalPopupExtender>

<asp:UpdatePanel ID="Pops" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <div class="modal-dialog">Select</div>
      <div class="modal-body" style="overflow: scroll; overflow-x: auto; overflow-y: auto; max-height: 400px;">
        <asp:GridView ID="gridTable" CssClass="table table-hover table-bordered" runat="server" Style="width: 100%; font-size: small" AutoGenerateColumns="False" DataKeyNames="Title">
          <Columns>
            <asp:BoundField HeaderText="Title" DataField="Title" />

            <asp:TemplateField HeaderText="Selection">
              <ItemTemplate>

                <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="false" OnCheckedChanged="CheckBox1_CheckedChanged" />
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
      </div>
      <br />
      <br />
      <div class="Controls col-xs-offset-4">
        <input id="SaveBA_OK" type="button" value="Save" name="SaveBA_OK" runat="server" onserverclick="SaveBA_OK_ServerClick" />
        <input id="CancelChange" type="button" value="Cancel" runat="server" onserverclick="CancelChange_ServerClick" />
      </div>
      <asp:Label ID="LabelPopup" runat="server" Text="" ForeColor="White"></asp:Label>
    </div>
  </ContentTemplate>
  </asp:UpdatePanel>
  

后端C#代码如下:

 protected void SaveBA_OK_ServerClick(object sender, EventArgs e)
    {
        
        int m = 0;
        
            
        for (int i = 0; i < gridTable.Rows.Count; i++)
        {
            CheckBox chk = (CheckBox)gridTable.Rows[i].FindControl("CheckBox1");

            if (chk.Checked)
            {
                selectedEx.Rows[m][0] = gridTable.Rows[i].Cells[0];
                //selectedEx.Rows[m][1] = "1";
                m = m + 1;
            }

        }
        
        LabelPopup.Text = "success";
    }

chk.Checked总是假的。是的,在点击“保存”按钮之前,我会检查复选框。请帮忙。 : - /

1 个答案:

答案 0 :(得分:0)

您可以使用foreach循环

遍历行
 foreach (GridViewRow row in gridTable.Rows)
 {
    CheckBox chk = row.Cells[1].Controls[1] as CheckBox;
    if ((chk != null) && chk.Checked)
    {
            // Do your stuff here...
    }
}

这可能与使用不同方法的情况相同,但您已将AutoPostBack设置为false,因此为什么OnCheckedChanged

检查您的PageLoad活动

我看到你有UpdatePanel个控件。尝试在UpdatePanel中设置一个触发器,其中包含GridView以链接到使用保存按钮单击UpdatePanel