如果关闭了模态弹出窗口而没有取消在模态内的网格视图中的行编辑,则它不会再次打开
Modal PopUp won't open again if it is closed without canceling row editing in a gridview placed within the modal
我有一个gridview就地编辑。这个gridview被放置在一个模态弹出扩展器中。一切都很好,但如果我编辑一行和输入不符合验证规则的数据 (RegularExpressionValidator)和然后关闭模态弹出,模态将不会再次打开。
我尝试过不同的事情,比如使用jquery来查找取消链接并触发其点击事件,但似乎没有什么工作。最后,我还尝试在javascript函数中取消编辑关闭模态,但问题仍然存在。
下面是我的代码的简化版本:
JS
<script src="script/jquery-1.10.2.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function CerrarPopup(strMpeCliente) {
// Find the Generated Cancel Button for the Row in Edit Mode.
var cancelButton = $('#<%= GridView2.ClientID %>')
.find('a')
.filter(function() { return $(this).text() === "Cancelar" });
// If Cancel Button is found, then show message and click the Cancel Button.
if (cancelButton != null && cancelButton.length > 0) {
buttonClick(cancelButton[0]);
}
var modalPopupBehavior = $find(strMpeCliente);
modalPopupBehavior.hide();
}
function buttonClick(button) {
button.click();
}
</script>
ASP <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</cc1:ToolkitScriptManager>
<asp:UpdatePanel ID="upnlPagos" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="btnViewDetails" CommandArgument='<%# Eval("Id") %>'
OnClick="View" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:LinkButton Text="" ID="lnkFake" runat="server" />
<cc1:ModalPopupExtender ID="mpe" runat="server" PopupControlID="pnlPopup" TargetControlID="lnkFake"
CancelControlID="btnClose" BackgroundCssClass="modalBackground" BehaviorID="mpeDetalles">
</cc1:ModalPopupExtender>
<asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup" Style="display: none">
<div class="header">
Details <a class="dvCerrar" href="javascript:;" onclick="CerrarPopup('mpeDetalles');"
title="Cerrar"> X </a>
</div>
<div class="body">
<asp:GridView ID="GridView2" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
runat="server" AutoGenerateColumns="false" OnRowEditing="gvPrueba_RowEditing"
OnRowUpdating="gvPrueba_RowUpdating" OnRowCancelingEdit="gvPrueba_RowCancelingEdit">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblCorreo" runat="server" Text='<%# Eval("Email")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCorreo" runat="server" Text='<%# Eval("Email")%>' MaxLength="70"
Width="180px"></asp:TextBox>
<asp:RegularExpressionValidator ID="revtxtCorreo" runat="server" ControlToValidate="txtCorreo"
ErrorMessage="" ValidationExpression="^'s*(['w'.'-]+)@(['w'-]+)(('.('w){2,3})+)'s*$"
Display="Dynamic" ForeColor="Red" ToolTip="Formato de correo incorrecto">*</asp:RegularExpressionValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="Editar" ButtonType="Link" ShowEditButton="true" ShowCancelButton="true"
CancelText="Cancelar" EditText="Editar" UpdateText="Guardar"></asp:CommandField>
</Columns>
</asp:GridView>
</div>
<div class="footer" align="right">
<asp:Button ID="btnClose" runat="server" Text="Close" CssClass="button"
onclick="btnClose_Click" />
</div>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
CS protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[5] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)),
new DataColumn("City",typeof(string)),
new DataColumn("Phone",typeof(int))});
dt.Rows.Add(1, "John Hammond", "United States", "Lasvagas", 1234567899);
dt.Rows.Add(2, "Mudassar Khan", "India", "Mumbai", 1234567899);
dt.Rows.Add(3, "Suzanne Mathews", "France", "Paris", 1234567899);
dt.Rows.Add(4, "Robert Schidner", "Russia", "Mascow", 1234567899);
GridView1.DataSource = dt;
GridView1.DataBind();
ViewState["Table"] = dt;
//DETALLE
DataTable dtDetalle = new DataTable();
dtDetalle.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Email",typeof(string))});
dtDetalle.Rows.Add(1, "John Hammond", "jj@siempresof.tom");
dtDetalle.Rows.Add(2, "Mudassar Khan", "aj@siempresof.tom");
dtDetalle.Rows.Add(3, "Suzanne Mathews", "eej@siempresof.tom");
dtDetalle.Rows.Add(4, "Robert Schidner", "tttj@siempresof.tom");
ViewState["tbDetalle"] = dtDetalle;
}
}
protected void gvPrueba_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView2.EditIndex = -1;
FillGrid();
}
protected void gvPrueba_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView2.EditIndex = e.NewEditIndex;
FillGrid();
}
protected void gvPrueba_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridView2.EditIndex = -1;
}
protected void View(object sender, EventArgs e)
{
FillGrid();
}
private void FillGrid()
{
DataTable dt = (DataTable)ViewState["tbDetalle"];
GridView2.DataSource = dt;
GridView2.DataBind();
mpe.Show();
}
protected void btnClose_Click(object sender, EventArgs e)
{
GridView2.EditIndex = -1;
mpe.Hide();
}
一如既往,任何帮助都将不胜感激
提前感谢。
注:这里是我的简化版的完整源代码链接。
隐藏或显示模态弹出扩展器仍然保持模态弹出在内存中(在页面中),所以验证仍然阻塞回发(当你试图正常保存或取消时会发生什么),除非你通过Javascript关闭它(我认为)。
所以我认为为什么弹出不再打开的原因是因为在后台的验证仍然是失败的模态,因此不允许再次显示自己。
你试过在取消按钮上使用CausesValidation=false
吗?
问好。
相关文章:
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 打开一个模态并将其链接到AngularJS中的指令
- 使用模态对话框(JQuery)编辑函数
- 通过AngularJS中的模态编辑对象-使用临时对象
- 在模态(bootstrap ui angular)中编辑现有联系人
- 如何在引导模态 asp.net MVC 中使用编辑
- 角度用户界面 使用模态形式编辑数据
- 如何在编辑字段时将id号发送到Jquery模态表单中
- 使用模态jhipster编辑对象
- Knockout JS-点击加载所选项目的模态编辑表单
- 在模态中使用剑道编辑器时,插入只读的超链接弹出窗口
- APEX模态页面插件没有'不允许多个提交/编辑而不刷新
- 将信息从表拉到要编辑的模态
- 图片插入错误与Twitter Bootstrap 3模态和定时编辑器
- AngularJS获取单个模型记录用于在模态中编辑
- 在codeigniter中编辑模态引导表单
- 编辑/删除HTML表w/Javascript或Jquery通过模态
- 使用角度复制编辑ng重复项(在模态中)时,取消按钮不起作用
- 如果关闭了模态弹出窗口而没有取消在模态内的网格视图中的行编辑,则它不会再次打开
- Knockout Js绑定到具有撤消功能的编辑模态