2009-09-23 28 views
12

El problema al que me enfrento es que cuando hay una validación en una página y estoy tratando de mostrar un modelo emergente, la ventana emergente no se muestra. Y al usar fire-bug noté que se está cometiendo un error.ModalPopupExtender y problemas de validación

El botón que se utiliza para mostrar la ventana emergente ha provocado que la validación se establezca en falso, así que estoy atascado en cuanto a qué está causando el error.

He creado una página de muestra para aislar el problema que estoy teniendo, cualquier ayuda sería muy apreciada.

El error

function() {Array.remove(Page_ValidationSummaries, document.getElementById("ValidationSummary1"));}(function() {var fn = function() {AjaxControlToolkit.ModalPopupBehavior.invokeViaServer("mpeSelectClient", true);Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);}) is not a function 
http://localhost:1131/WebForm1.aspx 
Line 136 

ASP

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CLIck10.WebForm1" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 
     <div> 
      <asp:Button ID="btnPush" runat="server" Text="Push" CausesValidation="false" onclick="btnPush_Click" /> 
      <asp:TextBox ID="txtVal" runat="server" /> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtVal" ErrorMessage="RequiredFieldValidator" /> 
      <asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 



     <asp:Panel ID="pnlSelectClient" Style="display: none" CssClass="box" runat="server"> 
     <asp:UpdatePanel ID="upnlSelectClient" runat="server"> 
      <ContentTemplate> 
       <asp:Button ID="btnOK" runat="server" UseSubmitBehavior="true" Text="OK" CausesValidation="false" OnClick="btnOK_Click" /> 
       <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="false" OnClick="btnCancel_Click" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     </asp:Panel> 

     <input id="popupDummy" runat="server" style="display:none" /> 

     <ajaxToolkit:ModalPopupExtender ID="mpeSelectClient" runat="server" 
     TargetControlID="popupDummy" 
     PopupControlID="pnlSelectClient" 
     OkControlID="popupDummy" 
     BackgroundCssClass="modalBackground" 
     CancelControlID="btnCancel" 
     DropShadow="true" /> 
    </div> 
</form> 

Código Detrás

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace CLIck10 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void btnOK_Click(object sender, EventArgs e) 
     { 
      mpeSelectClient.Hide(); 
     } 

     protected void btnCancel_Click(object sender, EventArgs e) 
     { 
      mpeSelectClient.Hide(); 
     } 

     protected void btnPush_Click(object sender, EventArgs e) 
     { 
      mpeSelectClient.Show(); 
     } 
    } 
} 
+0

¿Están vacíos los portatarjetas de destino simplemente porque no los ha tenido que llenar aún o necesita una devolución de datos para ocultar la ventana emergente modal? Si la devolución de datos no es necesaria, considere utilizar los métodos del lado emergente modal del lado del cliente para abrirlo y cerrarlo. –

+0

Voy a agregarles código, esto fue solo para demostrar el error que estaba teniendo. – Malachi

Respuesta

2

¿Está utilizando grupos de validación en cualquier lugar de la página? He tenido problemas con los eventos de control que no se activan cuando no forman parte de un grupo de validación y otros controles en la página forman parte de un grupo de validación.

+0

Poner todos los controles en ValidationGroup funcionó para mí. Antes de usar esto, incluso ModalPopup no se mostraba. – Zeeshanef

1

que iba a tratar de cambiar esto:

<input id="popupDummy" runat="server" style="display:none" /> 

a algo como esto:

<asp:Button id="popupDummy" runat="server" CausesValidation="false" Visible="false" /> 

apuesto a la entrada sin tipo se requiera la verificación.

4

Intente configurar su propiedad ValidationSummary "Enabled" como false en este evento: "btnPush_Click" ; y luego volver a establecerlo como enabled = "true" en este evento: "btnOK_Click", "btnCancel_Click".

Creo que esto funcionará si no tiene el resumen de validación dentro del Panel que desea mostrar. Pero no es una solución si necesita el resumen de validación dentro del panel emergente, ... la bruja es .. mi caso :(

Saludos

6

se trata de un problema con el uso tanto ValidationSummary y ModalPopup

ver aquí:. http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835

El problema es que hay una falta ";" entre los dos en scripts jejeados

Su solución es crear/usar un control de servidor personalizado que herede de ValidationSummary, que inyecta un ";" en el guión la página de inicio para resolver el error:

[ToolboxData("")] 
public class AjaxValidationSummary : ValidationSummary 
{ 
    protected override void OnPreRender(EventArgs e) 
    { 
    base.OnPreRender(e); 
    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), this.ClientID, ";", true); 
    } 
} 
+0

intenté esto y no solucionó el problema –

0

tuve el mismo problema, añadiendo ValidationGroup a los controles de validación hizo el truco!

3

Probé todas las respuestas disponibles en línea pero no funcionó ninguna.Luego traté de mover mi extensor modal emergente al final del HTML y funciona bien para mí. Yo y mis usuarios están contentos :) No estoy usando desde etiqueta estoy usando marcador de posición de contenido como a continuación:

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
<table id="tblMessage" runat="server" width="100%" > 
    <tr align="center"> 
     <td align="center"> 

contenido principal y

<asp:Panel ID="pnlSelectClient" Style="display: none" CssClass="box" runat="server">

<asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 
    <asp:UpdatePanel ID="upnlSelectClient" runat="server"> 
     <ContentTemplate> 
      <asp:Button ID="btnOK" runat="server" UseSubmitBehavior="true" Text="OK" CausesValidation="false" OnClick="btnOK_Click" /> 
      <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="false" OnClick="btnCancel_Click" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </asp:Panel> 

Si usted nota Tengo un resumen de validación dentro del panel porque quiero un mensaje de error dentro del menú emergente (también tengo un control adicional en el menú emergente). y

Algunas etiquetas HTML más aquí ya que tengo tantas otras cosas que hacer en una página. justo antes de cerrar la etiqueta de la TABLA

<ajaxToolkit:ModalPopupExtender ID="mpeSelectClient" runat="server" 
    TargetControlID="popupDummy" 
    PopupControlID="pnlSelectClient" 
    OkControlID="popupDummy" 
    BackgroundCssClass="modalBackground" 
    CancelControlID="btnCancel" 
    DropShadow="true" /> 

</table> 

Done.it está funcionando. Espero que funcione para otros también.

+0

moviendo modalpopupextender después de que el panel me funcionara. Gracias –

0

Otra cosa que debes probar, si no necesitas Client Script, puedes deshabilitarlo en el marcado. Hacer eso solucionó nuestro problema.

EnableClientScript="false"