关于跨页提交与验证控件的问题

问题来源

None.gif a.aspx是一个注册页面.它上面有一个检测用户名格式的正则表达式控件(RegularExpressionValidator) , 一个检测用户名是否存在的用户自定义控件(CustomValidator). 正则表达式控件的客户端验证是关闭的 , 如果注册成功后就提交到b.aspx , 我把一个服务器按钮的PostBackUrl = " ~/b.aspx "
None.gif但出现问题了:当用户名不合法或者用户已经存在的情况下
, 还是提交到b.aspx , 这就不符合我的要求了.
None.gif如果我去掉PostBackUrl
= " ~/b.aspx " , 让a.aspx提交到自身的页面 , 一切正常
None.gif请教高手
, 给点指教!!!
http://community.csdn.net/Expert/TopicView3.asp?id=5677458

也就是说,如果通过 A  执行跨页提交到 B,并且禁用A页面上的验证控件的客户端验证功能,当验证失败之后,依然执行提交到 B。

由于想出不来,当 PageA.IsValid = false 的时候,如何取消跨页提交定向到B,所以只好在 PageB 中处理了:

通过访问 PageB.PreviousPage.IsValid 确认提交页验证是否通过

A.aspx
None.gif < form  id ="form1"  runat ="server" >
None.gif    
< div >
None.gif        Email:
< asp:TextBox  ID ="TextBox1"  runat ="server" ></ asp:TextBox >
None.gif        
< asp:RequiredFieldValidator  ID ="RequiredFieldValidator1"  runat ="server"  ControlToValidate ="TextBox1"
None.gif            Display
="Dynamic"  EnableClientScript ="False"  ErrorMessage ="Required" ></ asp:RequiredFieldValidator >
None.gif        
< asp:RegularExpressionValidator  ID ="RegularExpressionValidator1"  runat ="server"  ControlToValidate ="TextBox1"  EnableClientScript ="false"
None.gif            Display
="Dynamic"  ErrorMessage ="Wrong  email format!"  ValidationExpression ="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"  EnableTheming ="True"  EnableViewState ="False" ></ asp:RegularExpressionValidator >
None.gif        
< br  />
None.gif        
< asp:Button  ID ="Button2"  runat ="server"  Text ="Post to this page"   />
None.gif        
< asp:Button  ID ="Button1"  runat ="server"  PostBackUrl ="b.aspx"  Text ="Post to anther page"   /></ div >
None.gif    
</ form >


B.aspx.cs
None.gif   protected   void  Page_Load( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) dot.gif// 当前请求为跨页提交
ExpandedSubBlockStart.gifContractedSubBlock.gif
            if (!PreviousPage.IsValid) dot.gif// 提交页验证失败
InBlock.gif                
//Response.Redirect(Request.UrlReferrer.AbsolutePath);  // 直接重定向导致,用户输入信息丢失
InBlock.gif
                Response.Write("<script>alert('验证失败。');history.back()</" + "script>"); // 有点 hack 味道,但是可以保持部分信息
InBlock.gif
                Response.End();
InBlock.gif                
return;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }


附:
事实上,自己很少使用 Button.PostBackUrl ,对 PostBackUrl 的实现机制还有点误解,以为还是先提交到当前页,然后再 Redirect 到目标页,还傻乎乎的在 CSDN 里面乱吼, http://community.csdn.net/Expert/TopicView3.asp?id=5677458 ,真是惭愧。看了 function WebForm_DoPostBackWithOptions(options) 才知道,原来真的是设置了 form.action 直接提交到了目标页。
关于内部原理,明天再研究了。

转载于:https://www.cnblogs.com/Jinglecat/archive/2007/07/27/832968.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值