我一直在使用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总是假的。是的,在点击“保存”按钮之前,我会检查复选框。请帮忙。 : - /
答案 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