ModalPopupExtender и проблемы с проверкой
Проблема, с которой я сталкиваюсь, заключается в том, что когда на странице выполняется проверка, и я пытаюсь отобразить всплывающее окно модели, оно не отображается. И с помощью fire-bug я заметил, что выдается ошибка.
Кнопка, которая используется для отображения всплывающего окна, имеет значение проверки, установленное на 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();
}
}
}
7 ответов
Это проблема с использованием как ValidationSummary, так и ModalPopup.
смотрите здесь: http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835
Проблема в том, что отсутствует ";" между двумя введенными сценариями.
Их решение заключается в создании / использовании пользовательского серверного элемента управления, который наследуется от ValidationSummary, который вставляет ";" в скрипт запуска страницы, чтобы исправить ошибку:
[ToolboxData("")]
public class AjaxValidationSummary : ValidationSummary
{
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), this.ClientID, ";", true);
}
}
Попробуйте установить для вашего свойства ValidationSummary "Enabled" значение false в этом событии: "btnPush_Click"; и затем установите его обратно в значение enabled = "true" для следующих событий: "btnOK_Click","btnCancel_Click".
Я думаю, что это сработает, если у вас нет панели подтверждения внутри панели, которую вы хотите открыть. Но это не решение, если вам нужна таблица подтверждения внутри всплывающей панели,... ведь это мой случай:(,
С уважением.
Я попробовал все доступные ответы онлайн, но ничего не получилось. Затем я попытался переместить мой модальный всплывающий расширитель в самый конец HTML, и он отлично работает для меня. Я и мои пользователи счастливы:) Я не использую тег FROM Я использую заполнитель содержимого, как показано ниже:
<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>
Готово. Работает. Надеюсь, что это работает и для других.
Вы используете группы проверки в любом месте на странице? У меня были проблемы с тем, что управляющие события не запускаются, когда они не являются частью группы проверки, а другие элементы управления на странице являются частью группы проверки.
Я бы попробовал изменить это:
<input id="popupDummy" runat="server" style="display:none" />
что-то вроде этого:
<asp:Button id="popupDummy" runat="server" CausesValidation="false" Visible="false" />
Могу поспорить, что нетипизированный ввод требует проверки.
У меня была такая же проблема, добавив ValidationGroup
чтобы контроль проверки сделал свое дело!
Еще одна вещь, которую стоит попробовать, если вам не нужен Client Script, вы можете отключить его в разметке. Это решило нашу проблему.
EnableClientScript="false"