【问题标题】:ajax ModalPopupExtender shows if the page is not validajax ModalPopupExtender 显示页面是否无效
【发布时间】:2020-12-18 11:18:52
【问题描述】:

我正在使用 Ajax 模态弹出扩展器在回发进行时阻止 UI。即使页面无效,即即使缺少一些必填字段值,此模式弹出窗口也会显示,模式弹出窗口总是会出现。如果页面无效,我不希望弹出模式显示下面是代码:

<script>
      function showProgress() {
            
            if (typeof (Page_ClientValidate) == 'function') {
                Page_ClientValidate();
            }

            if (Page_IsValid) {
                $find('mdlPopup').show();
            }

       
    }
</script>

在我的表单中,我有以下代码:

 <form id="form1" runat="server">
        <asp:ScriptManager ID="srcMan" runat="server"></asp:ScriptManager>
        <div>
             <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
            <asp:Button runat="server" Text="Send" CssClass="input-button"
                OnClick="btn_Click" Width="167px" OnClientClick="showProgress();" />
            <ajaxToolkit:ModalPopupExtender ID="mdlPopup" runat="server" TargetControlID="pnlPopup"
                PopupControlID="pnlPopup" BackgroundCssClass="modalBackground" />
    <asp:Panel ID="pnlPopup" runat="server" CssClass="updateProgress">
        <div id="imageDiv">
            <div style="float: left; margin: 9px">
                <img src="loader.gif" width="32px" height="32px" /></div>
            <div style="padding-top: 17.5px; font-family: Arial,Helvetica,sans-serif; font-size: 12px;">
               Please wait...
            </div>
        </div>
    </asp:Panel>

        </div>
    </form>

我的页面上有以下必需的验证器:

<asp:RequiredFieldValidator Display="None"  ID="Validator1" runat="server" ErrorMessage="First Name is required" ControlToValidate="txtFirstName"></asp:RequiredFieldValidator>

当我单击发送按钮时,即使名字文本框没有填充值,我也会看到 modalpopup。他们有什么办法吗,如果页面无效,我可以阻止 modalpop 执行。下面是发送按钮内的代码:

protected  void btn_Click(object sender, System.EventArgs e)
    {
        if (Page.IsValid)
        {
           // my code here
        }
    }

下面是我的完整代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="SendBulkEmail.WebForm3" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function showProgress() {
            if (Page_ClientValidate("Validate")) {
                $find('mdlPopup').show();
            }

       
    }
    </script>

      
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="srcMan" runat="server"></asp:ScriptManager>
        <div>
            <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
            <asp:Button runat="server" ID="Button2" Text="Send" CssClass="input-button"
                OnClick="btn_Click" Width="167px" OnClientClick="showProgress();" />
            <ajaxToolkit:ModalPopupExtender ID="mdlPopup" runat="server" TargetControlID="pnlPopup"
                PopupControlID="pnlPopup" BackgroundCssClass="modalBackground" />
    <asp:Panel ID="pnlPopup" runat="server" CssClass="updateProgress">
        <div id="imageDiv">
            <div style="float: left; margin: 9px">
                <img src="loader.gif" width="32px" height="32px" /></div>
            <div style="padding-top: 17.5px; font-family: Arial,Helvetica,sans-serif; font-size: 12px;">
                Sending file. Please wait...
            </div>
        </div>
    </asp:Panel>

        </div>
        <asp:RequiredFieldValidator Display="Dynamic" ValidationGroup="Validate"  ID="Validator1" runat="server" ErrorMessage="First Name is required" ControlToValidate="txtFirstName"></asp:RequiredFieldValidator>

    </form>
</body>
</html>

下面是我的代码:

 protected void btn_Click(object sender, EventArgs e)
        {

            System.Threading.Thread.Sleep(1000);
        }

下面是我运行代码时浏览器的图像。如您所见,未填写 txtFirstName 文本框。不过,我可以看到 modalPopup:

【问题讨论】:

  • 它似乎正在醒来。找不到任何问题。你的验证器在哪里?
  • 如果您单击发送按钮,即使您没有在 txtFirstName 中输入任何文本,modalPopUpExtender 也会立即出现。我希望验证消息而不是 modalPopUp
  • 我把我的整个代码放在上面
  • 它似乎正在工作。您可以尝试清理浏览器的缓存吗?
  • 我清理了缓存。当我运行应用程序时,我还发布了浏览器的图像。如您所见,未填写 txtFirstName 文本框。不过,我可以看到 modalPopup:

标签: javascript c# jquery asp.net ajax


【解决方案1】:

使用 .NET 4.5 时,将脚本管理器控件放入表单将禁用客户端验证。

解决办法是把这个appSettings添加到web.config中:

<appSettings>
   <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

以上内容将强制丢失 HTML5 客户端验证,但结果是客户端验证将返回到使用脚本管理器的表单。

我找到了解决方案here

我刚刚使用 .NET 4.0 项目进行了测试,您的代码运行良好,无需修改 web.config 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2021-05-07
    • 1970-01-01
    • 2015-04-05
    • 2016-01-22
    相关资源
    最近更新 更多