asp.net – Page.IsValid如何工作?
我有一个RequiredFieldValidator的以下代码。 EnableClientScript属性在验证控件中设置为“false”。我也在浏览器中禁用脚本。
我不在后面的代码中使用Page.IsValid。不过,当我在文本框中提交没有任何值时,我会收到错误消息。 从@Dai的意见,我知道这可以是一个问题,如果在Page_Load中有任何代码在回发中执行。将不会抛出验证错误。 (但是,对于按钮单击处理程序,没有必要检查Page.IsValid) if (Page.IsPostBack) { string value = txtEmpName.Text; txtEmpName.Text = value + "Appended"; } 题 >为什么服务器端验证不会在Page_Load之前发生? 更新1 参见ASP.NET Validators Common Misconception
注意:建议不要保留Page_Load中的所有逻辑。如果事件发生在按钮单击事件上,将其移动到按钮单击事件处理程序。如果某事发生在下拉事件上,请将其移动到下拉选择的项目更改事件处理程序。 更新2 看起来,我们需要添加If(Page.IsValid)在按钮点击也如果我们使用自定义验证器与服务器端验证。参见CustomValidator not working well。 注意:客户端验证问题在这里: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> CODE BEHIND protected void Button1_Click(object sender,EventArgs e) { string value = txtEmpName.Text; SubmitEmployee(value); } 参考文献: > Should I always call Page.IsValid? 解决方法
验证发生在Page_Load之后,但在事件处理程序之前(见
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%,以及您是否能够假设在初始验证期间通过/失败的验证在相同页面生命周期的后续验证期间仍然通过/失败。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 使用jquery调用ascx页面方法
- asp.net – 最后修改标头在MVC
- asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传
- .Net平台开发的技术规范与实践精华
- asp.net-mvc – asp.net mvc设置数字格式默认十进制千位分隔
- asp.net – 分析器错误消息:无法生成代码.抛出了类型’Sys
- MONO / ASP.NET Linux主机?
- asp.net-mvc – ASP.NET MVC页面不通过3G或某些代理服务器提
- asp.net – WebForms中的强类型容器
- asp.net-mvc – ASP.NET MVC:Action中的授权 – 建议的模式
- asp.net-mvc – “添加ASP.Net文件夹”未启用
- ASP.net喜欢WPF MVVM棱镜中的基于表单的身份验证
- asp.net-mvc – MVC帖子没有填充模型
- asp.net – 在SimpleMembership中验证用户
- ASP.NET异步任务 – 如何使用Page.RegisterAsync
- ASP.NET Core MVC 6中的默认,系统和Mi??crosoft
- Owin / Katana – 与ASP.NET请求生命周期集成
- ASP.Net MissingMethodException – 找不到“cto
- asp.net-mvc – ASP.NET MVC – Respository / S
- asp.net-mvc-2 – 用于实现CanExecute样式命令的