2009-09-23 17 views
12

Das Problem, auf das ich stehe, ist, dass das Popup nicht angezeigt wird, wenn auf einer Seite eine Validierung durchgeführt wird und ich versuche, ein Modell-Popup anzuzeigen. Und mit dem Feuer-Bug habe ich festgestellt, dass ein Fehler ausgelöst wird.ModalPopupExtender und Validierungsprobleme

Die Schaltfläche, die verwendet wird, um das Popup anzuzeigen, hat Cause-Validierung auf false festgelegt, so dass ich festhalte, was den Fehler verursacht.

Ich habe eine Beispielseite erstellt, um das Problem zu isolieren, das ich habe, würde jede Hilfe sehr geschätzt werden.

Der Fehler

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 hinter

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

Sind diese Click-Handler-Stubs leer, nur weil Sie sie noch nicht ausfüllen mussten oder ein Postback erforderlich ist, um das modale Popup zu verbergen? Wenn das Postback nicht erforderlich ist, sollten Sie die clientseitigen Methoden des modalen Popups verwenden, um es zu öffnen und zu schließen. –

+0

Ich werde ihnen Code hinzufügen, dies war nur um den Fehler zu demonstrieren, den ich hatte. – Malachi

Antwort

2

Verwenden Sie Validierungsgruppen an einer beliebigen Stelle auf der Seite? Ich hatte Probleme mit nicht ausgelösten Kontrollereignissen, wenn sie nicht zu einer Validierungsgruppe gehören und andere Kontrollen auf der Seite Teil einer Validierungsgruppe sind.

+0

Alle Kontrollen in ValidationGroup putten funktionierte für mich. Vor der Verwendung wurde selbst ModalPopup nicht angezeigt. – Zeeshanef

1

Ich würde versuchen, dies zu ändern:

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

etwas wie folgt aus:

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

Ich wette, die nicht typisierte Eingang validierpflichtigen.

4

Versuchen Sie, Ihre ValidationSummary-Eigenschaft "Enabled" für dieses Ereignis auf "false" zu setzen: "btnPush_Click" ; und setze es dann wieder auf enabled = "true" für diese Ereignisse: "btnOK_Click", "btnCancel_Click".

Ich denke, das wird funktionieren, wenn Sie nicht die Validierungszusammenfassung innerhalb des Panels, die Sie Pop-up werden wollen. Aber es ist keine Lösung, wenn Sie die Validierung Zusammenfassung im Popup-Panel benötigen, ... witch is .. mein Fall :(

mit freundlichen Grüßen

6

Dies ist ein Problem sowohl mit Validation und ModalPopup mit

siehe hier:. http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835

Das Problem ist, dass es ein fehlender ";" zwischen den beiden in Skripte.

Ihre Lösung besteht darin, ein benutzerdefiniertes Serversteuerelement zu erstellen/zu verwenden, das von ValidationSummary erbt, das ein ";" in die Seite Startskript den Fehler zu beheben:

[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

versuchte dies und es behob nicht das Problem –

0

ich das gleiche Problem hatte, war der Trick ValidationGroup den Überprüfungs-Steuer Zugabe!

3

Ich versuchte alle verfügbaren Antwort online, aber nicht funktioniert.Dann habe ich versucht, meinen modalen Popup-Extender am Ende des HTML zu bewegen und es funktioniert gut für mich. Ich und meine Benutzer sind glücklich :) Ich bin nicht von-Tag Ich bin mit Inhalt Platzhalter wie folgt:

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

Hauptinhalt und

<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> 

Wenn Sie bemerken, Ich habe Validierungszusammenfassung innerhalb des Panels, weil ich Fehlermeldung innerhalb des pop-up will (ich habe einige zusätzliche Kontrolle in Pop-up zu). und

Einige mehr HTML-Tag hier, wie ich so viele andere Dinge auf einer Seite zu tun haben. kurz vor schließendem Tag der Tabelle

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

</table> 

Done.it funktioniert. Hoffe, das funktioniert auch für andere.

+0

Verschieben des modalpopupepetender nach dem Panel für mich gearbeitet. Vielen Dank –

0

Eine andere Sache zu versuchen, wenn Sie Client-Skript nicht benötigen, können Sie es im Markup deaktivieren. Dadurch wurde unser Problem behoben.

Verwandte Themen