2009-09-23 7 views
12

Problem, który napotykam, polega na tym, że w przypadku sprawdzania poprawności na stronie i próby wyświetlenia wyskakującego okna podręcznego, okno podręczne nie jest wyświetlane. I za pomocą fire-bug zauważyłem, że został zgłoszony błąd.ModalPopupExtender i problemy z sprawdzaniem poprawności

Przycisk służący do wyświetlania wyskakującego okienka powoduje, że sprawdzanie poprawności jest ustawione na wartość false, więc utknąłem, co powoduje błąd.

Stworzyłem próbną stronę, aby wyizolować problem, który mam, każda pomoc będzie bardzo doceniona.

Błąd

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> 

kod związany

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

Czy kody te są puste tylko dlatego, że nie trzeba ich jeszcze wypełniać, czy też wymagają odświeżenia strony w celu ukrycia modalnego okna podręcznego? Jeśli odświeżenie nie jest konieczne, rozważ użycie metod modalnych podręcznych po stronie klienta, aby je otworzyć i zamknąć. –

+0

Będę dodawać do nich kod, to tylko po to, żeby zademonstrować błąd, który miałem. – Malachi

Odpowiedz

2

Czy korzystasz z grup sprawdzania poprawności w dowolnym miejscu na stronie? Wystąpiły problemy z uruchamianiem zdarzeń kontrolnych, które nie są częścią grupy sprawdzania poprawności, a inne elementy sterujące na stronie są częścią grupy sprawdzania poprawności.

+0

Umieszczenie wszystkich elementów sterujących w ValidationGroup działało dla mnie. Przed użyciem tego, nawet ModalPopup nie był wyświetlany. – Zeeshanef

1

bym spróbować zmienić to:

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

do czegoś takiego:

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

Założę wejście bez typu jest wymagające walidacji.

4

Spróbuj ustawić właściwość ValidationSummary "Enabled" na wartość false dla tego zdarzenia: "btnPush_Click" ; a następnie ustawienie z powrotem na enabled = "true" dla tych zdarzeń: "btnOK_Click", "btnCancel_Click".

Myślę, że to zadziała, jeśli nie masz podsumowania sprawdzania poprawności w panelu, które chcesz wyskoczyć. Ale nie jest to rozwiązanie, jeśli potrzebujesz podsumowania sprawdzania poprawności w panelu podręcznym, ... .. moja sprawa :(

Pozdrawiam

6

jest to problem, z wykorzystaniem zarówno ValidationSummary i ModalPopup

zobaczyć tutaj:. http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835

problemem jest to, że jest tam brakuje ";" między dwoma w skompresowane skrypty.

Ich rozwiązaniem jest utworzenie niestandardowego kontrolera serwera, który dziedziczy z ValidationSummary, który wstrzykuje ";" do skryptu startowego stronę, aby naprawić ten błąd:

[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

próbował tego i nie rozwiązał problemu –

0

miałem ten sam problem, dodając ValidationGroup do kontroli poprawności załatwiło sprawę!

3

Wypróbowałem wszystkie dostępne odpowiedzi w trybie online, ale nie zadziałały.Potem próbowałem przenieść mój modalny popup extender na samym końcu kodu HTML i działa dobrze dla mnie. Ja i moi użytkownicy są zadowoleni :) nie używam FROM tag Używam zawartość uchwyt miejsce tak jak poniżej:

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

główną treść i

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

Jeśli zauważysz Mam podsumowania sprawdzania poprawności wewnątrz panelu, ponieważ chcę komunikat o błędzie wewnątrz wyskakującego okienka (mam również dodatkowe sterowanie w pop-up). i

Jeszcze więcej tagów HTML, ponieważ mam tak wiele innych rzeczy do zrobienia na jednej stronie. tuż przed zamknięciem znacznika z tabeli

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

</table> 

Done.it działa. Mam nadzieję, że działa również dla innych.

+0

przenoszenie modalpopupextender po panelu pracował dla mnie. Dziękuję Ci –

0

Jeszcze jedno, jeśli nie potrzebujesz skryptu klienta, możesz go wyłączyć w znacznikach. To naprawiło nasz problem.

EnableClientScript="false" 
Powiązane problemy