javascript - ajax ModalPopupExtender 显示页面是否无效
问题描述
我正在使用 Ajax Modal 弹出扩展器在回发进行时阻止 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:
解决方案
使用.NET 4.5时,将脚本管理器控件放入表单将禁用客户端验证。
解决方案是将此 appSettings 添加到 web.config 中:
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
以上将强制 HTML5 客户端验证丢失,但结果是客户端验证将返回到使用脚本管理器的表单。
我刚刚使用.NET 4.0项目进行了测试,您的代码在不修改 web.config 文件的情况下运行良好。
推荐阅读
- unity3d - Unity - Tilemap Contains - 如何读取 Tilemap 是否包含世界特定坐标上的图块?
- awk - 有没有办法用 sed 替换所有逗号,除了引号中的逗号
- arrays - 为什么在 C 中迭代这样的数组效率低下?
- sql - SQL查询查找每个客户的第一条记录并更新
- java - 重命名“main”方法并从其他类调用会导致错误
- javascript - Webpack 捆绑使用另一个包含 WebAssembly 的库的库会提供几个文件作为输出,但它们的路径不是相对的
- r - R:将数据框列名自动连接到向量
- roslyn - 将参考程序集添加到 Roslyn 分析器代码修复单元测试
- markdown - 如何让代码语法突出显示在 Google Codelab 中工作?
- firebase - Firebase 安全规则 - 未定义的资源错误