12

我面临的问题是,当页面上有验证并且我试图显示模型弹出窗口时,弹出窗口没有显示。通过使用 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();
        }
    }
}
4

7 回答 7

6

这是同时使用 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);
  }
}
于 2010-04-26T15:40:59.720 回答
4

尝试在此事件上将您的 ValidationSummary “Enabled”属性设置为 false:“btnPush_Click”;然后在此事件上将其设置回启用 =“true”:“btnOK_Click”、“btnCancel_Click”。

我认为如果您在要弹出的面板中没有验证摘要,这将起作用。但是,如果您需要弹出面板中的验证摘要,这不是解决方案,...女巫就是我的情况:( .

此致。

于 2009-10-05T07:45:38.493 回答
3

我在网上尝试了所有可用的答案,但没有任何效果。然后我尝试在 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>

完成。它正在工作。希望这也适用于其他人。

于 2013-03-27T20:21:32.790 回答
2

您是否在页面上的任何位置使用验证组?当控件事件不属于验证组并且页面上的其他控件属于验证组时,我遇到了控件事件未触发的问题。

于 2009-09-23T13:40:17.360 回答
1

我会尝试改变这个:

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

像这样:

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

我敢打赌,无类型输入需要验证。

于 2009-09-23T13:41:41.857 回答
0

我有同样的问题,添加ValidationGroup到验证控件就可以了!

于 2013-03-14T16:39:14.397 回答
0

要尝试的另一件事是,如果您不需要客户端脚本,您可以在标记中禁用它。这样做解决了我们的问题。

EnableClientScript="false"
于 2014-02-24T14:44:32.187 回答