Problèmes de ModalPopupExtender et de validation

le problème auquel je suis confronté est que lorsqu'il y a validation sur une page et que j'essaie d'afficher un pop-up de modèle, le pop-up ne s'affiche pas. Et en utilisant fire-bug j'ai remarqué qu'une erreur est lancée.

le bouton qui est utilisé pour afficher la pop-up a la validation de cause définie à false donc je suis coincé quant à ce qui cause l'erreur.

j'ai créé une page échantillon pour isoler le problème que j'ai, toute aide serait grandement apprécier.

L'Erreur

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>

Code Derrière

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();
        }
    }
}
12
demandé sur Malachi 2009-09-23 17:35:49

7 réponses

c'est un problème avec L'utilisation de ValidationSummary et ModalPopup.

voir ici: http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835

Le problème est qu'il manque un ";" entre les deux injecté des scripts.

leur solution est de créer/utiliser un contrôle de serveur personnalisé qui hérite de ValidationSummary, qui injecte un"; " dans le script de démarrage de la page pour corriger le bug:

[ToolboxData("")]
public class AjaxValidationSummary : ValidationSummary
{
  protected override void OnPreRender(EventArgs e)
  {
    base.OnPreRender(e);
    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), this.ClientID, ";", true);
  }
}
6
répondu Aaron Hoffman 2010-04-26 15:40:59

essayez de définir votre propriété ValidationSummary "Enabled" à false sur cet événement: "btnPush_Click" ; et de définir ensuite revenir à enabled = "true" sur ces événements : "btnOK_Click" ,"btnCancel_Click".

je pense que cela fonctionnera si vous n'avez pas le résumé de validation à l'intérieur du Panneau que vous souhaitez afficher.Mais ce n'est pas une solution si vous avez besoin du résumé de validation à l'intérieur de la fenêtre panneau...la sorcière est mon cas :(.

Meilleures Salutations.

4
répondu TestSubject09 2009-10-05 07:45:38

j'ai essayé toutes les réponses disponibles en ligne mais n'ai pas fonctionné. Puis j'ai essayé de déplacer mon extension popup modal à la toute fin du HTML et cela fonctionne très bien pour moi. Mes utilisateurs et moi sommes heureux :) Je ne suis pas à l'aide DE la balise, je suis en utilisant le Contenu de marque comme ci-dessous:

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

contenu principal et

<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 vous remarquez que j'ai un résumé de validation à l'intérieur du panneau parce que je veux un message d'erreur à l'intérieur de la fenêtre pop up(j'ai quelques messages supplémentaires contrôle en pop up trop). et

encore un peu de tag HTML ici car j'ai tellement d'autres choses à faire sur une page. juste avant de fermer l'étiquette de la TABLE

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

</table>

fait.ça marche. Espérons que les travaux pour les autres aussi.

3
répondu user2217342 2013-03-27 20:21:32

utilisez-vous des groupes de validation n'importe où sur la page? J'ai eu des problèmes avec les événements de contrôle qui ne se déclenchent pas quand ils ne font pas partie d'un groupe de validation et les autres contrôles sur la page font partie d'un groupe de validation.

2
répondu TGnat 2009-09-23 13:40:17

je vais essayer de changer cela:

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

à quelque chose comme ceci:

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

je parie que l'entrée non typée doit être validée.

1
répondu Aaron Daniels 2009-09-23 13:41:41

j'ai eu le même problème, en ajoutant ValidationGroup pour les contrôles de validation a fait l'affaire!

0
répondu Madam Zu Zu 2013-03-14 16:39:14

autre chose à essayer, si vous n'avez pas besoin de script Client, vous pouvez le désactiver dans le markup. Cela a réglé notre problème.

EnableClientScript="false"
0
répondu Adrian 2014-02-24 14:44:32