Page.IsValid 是如何工作的?

2024-01-18

我有以下代码RequiredFieldValidator. The EnableClientScript属性在验证控件中设置为“false”。我还在浏览器中禁用了脚本。

我没有使用Page.IsValid在后面的代码中。不过,当我在文本框中没有任何值的情况下提交时,我会得到error message.

从@Dai的评论中,我知道这可能是一个问题,如果有任何代码Page_Load这是在一个执行postback。不会抛出验证错误。

(但是,对于按钮单击处理程序,无需检查Page.IsValid)

if (Page.IsPostBack)
{
    string value = txtEmpName.Text;
    txtEmpName.Text = value + "Appended";
}

QUESTION

  1. 为什么之前没有进行服务器端验证Page_Load?
  2. 为什么我使用的时候效果很好Page.IsValid?
  3. 您能提供解释这一点的文章参考吗? (不是说 - 总是使用Page.IsValid;但有些东西说明了必须使用的场景是什么Page.IsValid

UPDATE 1

Refer ASP.NET 验证器的常见误解 http://blogs.microsoft.co.il/blogs/linqed/archive/2009/09/01/asp-net-validators-common-misconception.aspx

Page.IsValid仅在运行后才能访问Page.Validate()之后隐式调用的方法Page_Load。如果您将所有逻辑保留在 Page_Load 事件处理程序中(强烈建议不要这样做!),请调用Page.Validate()在检查之前Page.IsValid.

Note: 建议不保留所有逻辑都在Page_Load。如果按钮单击事件发生某些情况,请将其移至按钮单击事件处理程序。如果下拉事件发生某些情况,请将其移至下拉所选项目更改事件处理程序。

UPDATE 2

看来我们需要添加If(Page.IsValid) in button click另外,如果我们使用的是Custom Validator与服务器端验证。参考CustomValidator 无法正常工作 https://stackoverflow.com/questions/11064613/customvalidator-not-working-well.

Note:此处存在客户端验证问题:是否使用 Page_IsValid 或 Page_ClientValidate()(对于客户端事件) https://stackoverflow.com/questions/13832818/whether-to-use-page-isvalid-or-page-clientvalidate-for-client-side-events

MARKUP

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
    alert('haiii');
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
    <asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" />
    <asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName"
        EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic"
        ValidationGroup="ButtonClick"></asp:RequiredFieldValidator>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" />
</div>
</form>
</body>
</html>

背后的代码

protected void Button1_Click(object sender, EventArgs e)
{
    string value = txtEmpName.Text;
    SubmitEmployee(value);
}

参考:

  1. 我应该始终调用 Page.IsValid 吗? https://stackoverflow.com/questions/1039465/should-i-always-call-page-isvalid
  2. ASP.NET 验证控件 – 要点、提示和技巧 http://www.dotnetcurry.com/ShowArticle.aspx?ID=121
  3. CustomValidator 无法正常工作 https://stackoverflow.com/questions/11064613/customvalidator-not-working-well

验证发生在Page_Load,但在事件处理程序之前(请参阅http://msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx http://msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx).

如果您的按钮没有引起验证,您必须手动触发Page.Validate.

你不可以审问Page.IsValid直到 (1) 您致电之后Page.Validate(2) 导致验证的控件是回发的来源/包含在回发中。

如果您需要在事件处理程序触发之前进行验证,您可以使用:

if (Page.IsPostback) 
{
   Page.Validate( /*Control Validation Group Name Optional*/ );
   if (Page.IsValid)
   {
       //Do some cool stuff
   }
}

您可能还需要考虑重新设计,这样您就不需要这样做。

在处理导致验证的控件的事件处理程序中,Page.IsValid保证可用。在所有其他情况下,重新请求验证通常更安全。一种用于处理具有验证器的表单上的提交的模型:

void btnSubmit_Click(object sender, EventArgs e)
{
   this.UpdateGUIWithSubmitRequest();
   if (Page.IsValid)
   {
      this.ProcessSuccessfulSubmission();
   }
   else
   {
      this.ProcessInvalidSubmission();
   }
}

如果您使用的是CustomValidator有一个非常昂贵的验证步骤,您可以考虑将结果缓存在HttpResponse.Cache因此,如果多次调用 Page.Validate,则无需重新验证。

void CustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
   CustomValidator self = (CustomValidator)source;
   string validatorResultKey = self.ClientID;
   bool? validatorResult = Context.Items[validatorResultKey] as bool?;
   if (validatorResult.HasValue)
   {
      args.IsValid = validatorResult.Value;
      return;
   }

   bool isValid = this.DoSomethingVeryTimeConsumingOrExpensive();
   Context.Items[validatorResultKey] = isValid;
   args.IsValid = isValid;
}

当然,这 100% 取决于您的架构,以及您是否能够假设初始验证期间通过/失败的验证在同一页面生命周期的后续验证期间仍然通过/失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Page.IsValid 是如何工作的? 的相关文章

  • 验证属性被触发两次

    在我的 MVC3 应用程序中 我有模型 未删除重要属性 public class AccountViewModel StringLength 65 public string Property1 get set StringLength 6
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • Asp.Net Identity - 不区分大小写的电子邮件和用户名

    有没有办法让 Asp Net Identity 的电子邮件地址和用户名不区分大小写 目前 如果我调用 FindByEmailAsync email 只有在电子邮件地址完全按照键入的方式存储时 区分大小写 它才会起作用 您可以更改用户的注册方
  • 如何像web.config一样转换log4net配置?

    从我的 csproj 文件
  • ASP.NET HTTP 请求是否会转换为 1 个线程?

    可以安全地假设当用户通过 HTTP 请求 aspx 页面时 ASP NET 至少为其创建 1 个线程吗 如果是这样 持续多久 如果 1000 人向同一个 aspx 页面发出 HTTP 请求 是否会涉及一些线程回收 因此不会产生不同的 100
  • ASP.NET 中的回发问题

    我有一个 asp net 标签控件 其 Visible 属性设置为 false 在后面的代码中 我根据用户是否已登录将其可见性设置为 true false 一个奇怪的行为是 在回发时 代码隐藏执行并将标签可见性的值设置为任意值 然后标记执行
  • ASP.Net 5 RC2 配置节绑定

    我刚刚将示例应用程序从 RC1 升级到 RC2 但我找不到如何将 appSettings json 文件的特定部分绑定到我自己的 POCO 样本位于https github com aspnet live asp net blob rc2
  • ASP.NET MVC4 与 Twitter Bootstrap 捆绑

    我正在尝试将 MVC 4 中的新捆绑功能与 Twitter bootstrap 结合使用 在我看来 css 中的字形 png 文件的路径在某种程度上被搞乱了 这是我的代码 bundles Add new StyleBundle bundle
  • 如果验证失败,如何在 ASP.NET MVC 中阻止 jquery ajax 提交

    我在用ASP NET 5 MVC RC1 我的 ASP NET MVC 使用的 jquery 验证插件是默认 ASP NET 5 模板项目使用的标准 jquery validate js jQuery Validation Plugin v
  • 如何在 CAST/CONVERT 之前检查 VARCHAR(n) 的 XML 格式是否正确

    我的公司有一个日志表 其中包含VARCHAR N 放置字符串的列 即supposed是 XML 但事实证明它并不总是格式良好的 为了对日志记录进行分析 以确定错误趋势等 我一直在使用LIKE陈述 然而 这非常慢 最近 我发现SQL Serv
  • App_offline.htm、CSS、图像和 aspnet_isapi.dll

    因此 我正在开发的网站正在使用 urlrewriting 与 aspnet isapi dll 配合 所有内容都映射到它 我放置了 app offline htm 文件 所有文本均显示 但是 CSS 或图像未提供 我猜测由于通配符映射而不是
  • ASP.NET 会话状态服务器与 InProc 会话

    运行会话状态服务器而不是 InProc 的开销性能损失是多少 重要吗 我知道您可以使用状态服务器重新启动 w3wp 并保留所有会话状态 这是相对于 InProc 的唯一优势吗 这取决于您的部署计划 在单个服务器上 损失很小 但好处同样有限
  • 如何强制网站的某些部分在 SSL 下浏览?

    我们网站上的某些部分或页面涉及敏感的用户或帐户信息 我想强制用户在 HTTPS 下浏览这些页面 而其他包含公共内容的页面应在 HTTP 下可用 我打算在 IIS 上安装 url Rewrite 模块并编写规则来实现此目的 我不知道如何在 w
  • 使用 jquery ajax 和 asp.net 处理程序上传文件

    我正在努力让它工作 但我在上传文件时遇到错误 ASPX
  • 用于匹配某些数字的正则表达式

    以下正则表达式将匹配 9 11 位数字 d 9 11 编写完全匹配 9 的正则表达式的最佳方法是什么or11位数字 不包括10位 使用输入元素的模式属性 因此正则表达式应该匹配输入字段的整个值 我想接受任何包含 9 或 11 位数字的号码
  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • CSS 样式在部分回发时停止工作

    在 ASP net C 应用程序中 我有一个带有自定义 css 的复选框 CSS 文件是 复选框
  • Razor C# - 从数据库获取数据

    我正在使用 WebMatrix 我创建了一个数据库并放置了一个包含几行数据的表 我可以连接到它并获取数据WebGrid 但它只提供了一种使用表格输出数据的方法 这是我的 shows cshtml 代码 var db Database Ope
  • 在Page_Load之前处理事件

    我有一个 ASP NET 网页 其中包含大量在页面的 Page Load 事件中处理的代码 我在页面上还有一个下拉框 应该使用新值重新加载页面 但我想在处理整个页面加载代码之前获取这个新值 我正在尝试了解 ASP NET 页面生命周期 我应

随机推荐

  • Knex.js:创建表并插入数据

    鉴于我有一个像这样的 Knex js 脚本 exports up function knex Promise return knex schema createTable persons function table table incre
  • 如何转换spring-boot请求参数

    目前 请求方法接收编码令牌作为参数 该令牌是String但不是 JSON 或类似的东西 然后该令牌被解码为数据类 GetMapping value api xyz public ResponseEntity
  • 如何获取 YouTube 直播的实际视频 URL?

    有没有一种方法可以获取像这样的 YouTube 直播的 HLS URLhttps www youtube com embed WVZpCdHq3Qg https www youtube com embed WVZpCdHq3Qg 我尝试过典
  • NumPy 库导入错误:DLL 加载失败:找不到指定的过程

    我正在 Windows 10 上使用 Visual Studio 2017 学习 python 当我尝试将 NumPy 库导入到我的代码中时 出现此错误 我尝试过卸载并重新安装 寻找libiomp5md dll每条指令ImportError
  • Google Cloud Run 上的 numpy 和 pandas 导入速度缓慢

    我正在开发一个 API 并将其部署在 Google Cloud Run 上 有一个导入 pandas 和 numpy 的预启动 python 脚本 当我对导入进行计时时 在 Cloud Run 上 numpy 大约需要 2 秒 pandas
  • 复选框中的 ng-change 被触发多次,因为 ng-click 超过了它

    由于代码比 1000 个单词更好 我创建了一个 plunker 来展示我的问题 http bit ly 1uiR2wy http bit ly 1uiR2wy 给定特定的 DOM 元素 事情是我有一个带有 ng change 的输入复选框
  • 对于这种情况,最好的数据库结构是什么?

    我有一个保存房地产 MLS 多重列表服务 数据的数据库 目前 我有一个表包含所有列表属性 价格 地址 平方英尺等 有几种不同的财产类型 住宅 商业 出租 收入 土地等 每种财产类型共享大部分属性 但也有一些属性是该财产类型所独有的 我的问题
  • 从后台重新启动应用程序后 iAds 加载受到限制(也发生在 iAdSuite 中)

    我正在努力实施NavigationBanner iAdSuite示例到我的项目中 以便我可以共享一个AdBannerView跨多个视图控制器的实例 但我不断收到以下错误 错误域 ADErrorDomain代码 2 操作无法完成 加载受到限制
  • 构建 Eclipse 项目时自动运行 JUnit

    我想在保存 Eclipse 项目时自动运行单元测试 每当我保存文件时 该项目就会自动构建 所以我认为这应该以某种方式实现 我该怎么做 是获取 ant 脚本并更改项目构建以使用带有目标的 ant 脚本的唯一选择build and compil
  • 我可以从 ASP.NET 页面下载由内存流生成的 Excel 文件吗?

    我有一个 ASP NET 页面 用户在其中提供 ID 然后我们从数据库中提取一些数据并将其放入 Excel 电子表格中 我想在内存中创建 Excel 文件 然后允许用户下载该文件 我可以在服务器上创建一个文件 然后删除它 但这似乎没有必要
  • 为什么我会收到 NoClassDefFoundError: java/awt/Desktop?

    我正在尝试打开一个URI使用 Swing 我得到了上述错误 原因是什么以及如何解决 当我在控制台中执行此操作时 一切正常 但当我在 GUI 中执行此操作时 出现此错误 我应该说我使用Weblogic作为服务器 Code private st
  • 基于列将两个 pandas DataFrame 相乘

    如果我有两个 DataFrame 如何将它们按列相乘以生成包含结果的 DataFrame 例如 df1 pd DataFrame np random randint 10 size 5 4 columns A B C D A B C D 0
  • 将 initWithNibName 与故事板结合使用

    下面是将 initWithNibName 与单独的 xib 视图一起使用的示例 TerminalViewController ctrl TerminalViewController alloc initWithNibName Control
  • 将现有项目转换为 Silverlight 4 时出现问题

    我们有一个正在运行的 Silverlight 3 项目 将目标框架更改为 Silverlight 4 后 应用程序将不再启动 它在生成的 InitializeComponent 方法中的以下行中引发异常 System Windows App
  • ExtJS 4 动态更改网格存储

    是否可以在 ExtJS 4 中更改网格存储 例如 我有两个模型 User Ext define User extend Ext data Model hasMany Product Product Ext define Product ex
  • 从 Rails3 项目中卸载 gem 的最佳方法是什么?

    我通过 Gemfile 使用捆绑器安装了所有 gem 我 错误地 认为 如果我从 Gemfile 中删除了一个 gem 并运行 捆绑安装 则删除的 gem 将被卸载 我查看了捆绑程序帮助文件 据我所知 它没有卸载 gem 的方法 我是否只使
  • GNU 屏幕没有响应,似乎被阻止

    GNU 屏幕似乎冻结了 无法输入用户输入 我正在使用 GNU 屏幕 当我按下屏幕时 它变得没有响应 我可以执行所有 GNU 屏幕命令 但无法输入用户输入 我不想关闭这个屏幕 因为我有重要的工作 我不想失去它 In the commands
  • 设置查询以搜索 dojo 数据网格的所有字段

    我有一个包含多个字段的 Dojo DataGrid 我目前正在将查询设置为一次搜索一个字段 如下所示 grid setQuery name Bob ignoreCase true 但是我希望查询能够立即搜索所有字段 例如 假设我有三个标题为
  • 关于 .shuffle、.batch 和 .repeat 的 Tensorflow 数据集问题

    我有一个关于使用 tf Dataset 进行批处理 重复和随机播放的问题 我不清楚如何使用重复和随机播放 我明白那个 batch将决定有多少训练样本将经历随机梯度下降 使用 repeat and shuffle我仍然不清楚 第一个问题 即使
  • Page.IsValid 是如何工作的?

    我有以下代码RequiredFieldValidator The EnableClientScript属性在验证控件中设置为 false 我还在浏览器中禁用了脚本 我没有使用Page IsValid在后面的代码中 不过 当我在文本框中没有任