Подтвердить что ты не робот

Проблемы с ModalPopupExtender и проверки

Проблема, с которой я сталкиваюсь, заключается в том, что при проверке на странице и я пытаюсь отобразить всплывающее окно модели, всплывающее окно не отображается. И, используя fire-bug, я заметил, что возникает ошибка.

Кнопка, которая используется для отображения всплывающего окна, имеет значение validation, установленное на false, поэтому я застрял в том, что вызывает ошибку.

Я создал образец страницы, чтобы изолировать проблему, которая у меня есть, любая помощь будет принята с благодарностью.

Ошибка

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>

Код за

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();
        }
    }
}
4b9b3361

Ответ 1

Это проблема с использованием как ValidationSummary, так и ModalPopup.

см. здесь: http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835

Проблема в том, что отсутствует ";" между двумя введенными сценариями.

Их решение заключается в создании/использовании настраиваемого серверного элемента управления, который наследуется от ValidationSummary, который вводит ";" в начало страницы script, чтобы исправить ошибку:

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

Ответ 2

Попробуйте установить для свойства ValidationSummary "Enabled" значение false для этого события: "btnPush_Click" ; а затем установите для этого параметра значение enabled = "true" в этих событиях: "btnOK_Click", "btnCancel_Click".

Я думаю, что это сработает, если у вас нет сводки валидации внутри панели, которую вы хотите всплывать. Но это не решение, если вам нужна сводка валидации внутри всплывающей панели... witch is my case: (.

С наилучшими пожеланиями.

Ответ 3

Я попробовал все доступные ответы в Интернете, но не работал. Затем я попытался переместить мой модальный всплывающий расширитель на самом конце HTML, и он отлично работает для меня. Я и мои пользователи счастливы:) Я не использую тег FROM Я использую Content place holder, как показано ниже:

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

основной контент и

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

Если вы заметили, что у меня есть сводка сводки внутри панели, потому что я хочу, чтобы сообщение об ошибке внутри всплывающего окна (у меня есть дополнительный элемент управления, который тоже появляется). и

Еще несколько тегов HTML здесь, так как у меня есть так много других вещей, которые можно сделать на одной странице. прямо перед закрывающим тегом TABLE

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

</table>

Done.it работает. Надеюсь, что это работает и для других.

Ответ 4

Используете ли вы группы проверки в любом месте страницы? У меня были проблемы с событиями управления, которые не срабатывают, когда они не являются частью группы проверки, а другие элементы управления на странице являются частью группы проверки.

Ответ 5

Я бы попробовал изменить это:

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

примерно так:

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

Я уверен, что нетипизированный вход требует проверки.

Ответ 6

У меня была такая же проблема, добавив ValidationGroup к элементам проверки, сделал трюк!

Ответ 7

Еще одна попытка попробовать, если вам не нужен клиент Script, вы можете отключить его в разметке. Это исправило нашу проблему.

EnableClientScript="false"