使用AJAX ModalPopupExtender时如何保留GridView行引用?
解决ModalPopupExtender弹窗后丢失GridView行引用的方法
方法1:用隐藏字段存储RowID
在页面添加一个隐藏字段,当DropDownList触发OnSelectedIndexChanged事件时,把获取到的RowID存入该字段,弹窗确认时直接读取即可:
<asp:HiddenField ID="hfRowID" runat="server" />
后台代码修改:
DropDownList ddlid = (DropDownList)sender; GridViewRow gvrow = (GridViewRow)ddlid.NamingContainer; int rowID = Int32.Parse(GridView1.DataKeys[gvrow.RowIndex].Values[0].ToString()); // 将RowID存入隐藏字段 hfRowID.Value = rowID.ToString(); // 触发弹窗 ModalPopupExtender1.Show();
弹窗确定按钮的点击事件中读取:
int currentRowID = Int32.Parse(hfRowID.Value); // 执行后续业务逻辑
方法2:绑定RowID到弹窗按钮的CommandArgument
用一个隐藏按钮作为ModalPopupExtender的TargetControlID,在DropDownList的事件里判断需要弹窗时,把RowID赋值给弹窗确定按钮的CommandArgument:
<asp:Button ID="btnHiddenTrigger" runat="server" Style="display:none;" /> <asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="btnHiddenTrigger" PopupControlID="pnlPopup"> </asp:ModalPopupExtender> <asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup"> <asp:Button ID="btnConfirm" runat="server" Text="确定" OnClick="btnConfirm_Click" /> <asp:Button ID="btnCancel" runat="server" Text="取消" OnClick="btnCancel_Click" /> </asp:Panel>
后台代码:
protected void ddlid_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddlid = (DropDownList)sender; GridViewRow gvrow = (GridViewRow)ddlid.NamingContainer; int rowID = Int32.Parse(GridView1.DataKeys[gvrow.RowIndex].Values[0].ToString()); // 判断是否需要弹窗 if (ddlid.SelectedValue == "需要弹窗的项值") { // 把RowID绑定到确定按钮的CommandArgument btnConfirm.CommandArgument = rowID.ToString(); ModalPopupExtender1.Show(); } else { // 不需要弹窗的逻辑处理 } } protected void btnConfirm_Click(object sender, EventArgs e) { Button btn = (Button)sender; int currentRowID = Int32.Parse(btn.CommandArgument); // 执行确认后的逻辑 ModalPopupExtender1.Hide(); } protected void btnCancel_Click(object sender, EventArgs e) { ModalPopupExtender1.Hide(); }
方法3:用ViewState存储RowID
如果是同页面回传场景,可以把RowID存入ViewState,弹窗确认时读取:
protected void ddlid_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddlid = (DropDownList)sender; GridViewRow gvrow = (GridViewRow)ddlid.NamingContainer; int rowID = Int32.Parse(GridView1.DataKeys[gvrow.RowIndex].Values[0].ToString()); if (ddlid.SelectedValue == "需要弹窗的项值") { ViewState["CurrentRowID"] = rowID; ModalPopupExtender1.Show(); } } protected void btnConfirm_Click(object sender, EventArgs e) { if (ViewState["CurrentRowID"] != null) { int currentRowID = (int)ViewState["CurrentRowID"]; // 处理业务逻辑 ModalPopupExtender1.Hide(); } }
内容的提问来源于stack exchange,提问作者IchBinDicky
相关产品推荐
相关产品推荐

