关于跨页提交与验证控件的问题
2007-07-27 01:02 晓风残月 阅读(1013) 评论(0) 编辑 收藏 举报
问题来源
也就是说,如果通过 A 执行跨页提交到 B,并且禁用A页面上的验证控件的客户端验证功能,当验证失败之后,依然执行提交到 B。
由于想出不来,当 PageA.IsValid = false 的时候,如何取消跨页提交定向到B,所以只好在 PageB 中处理了:
通过访问 PageB.PreviousPage.IsValid 确认提交页验证是否通过
A.aspx
B.aspx.cs
附:
事实上,自己很少使用 Button.PostBackUrl ,对 PostBackUrl 的实现机制还有点误解,以为还是先提交到当前页,然后再 Redirect 到目标页,还傻乎乎的在 CSDN 里面乱吼,http://community.csdn.net/Expert/TopicView3.asp?id=5677458 ,真是惭愧。看了 function WebForm_DoPostBackWithOptions(options) 才知道,原来真的是设置了 form.action 直接提交到了目标页。
关于内部原理,明天再研究了。
a.aspx是一个注册页面.它上面有一个检测用户名格式的正则表达式控件(RegularExpressionValidator),一个检测用户名是否存在的用户自定义控件(CustomValidator). 正则表达式控件的客户端验证是关闭的,如果注册成功后就提交到b.aspx,我把一个服务器按钮的PostBackUrl="~/b.aspx"
但出现问题了:当用户名不合法或者用户已经存在的情况下,还是提交到b.aspx,这就不符合我的要求了.
如果我去掉PostBackUrl="~/b.aspx",让a.aspx提交到自身的页面,一切正常
请教高手,给点指教!!!
http://community.csdn.net/Expert/TopicView3.asp?id=5677458但出现问题了:当用户名不合法或者用户已经存在的情况下,还是提交到b.aspx,这就不符合我的要求了.
如果我去掉PostBackUrl="~/b.aspx",让a.aspx提交到自身的页面,一切正常
请教高手,给点指教!!!
也就是说,如果通过 A 执行跨页提交到 B,并且禁用A页面上的验证控件的客户端验证功能,当验证失败之后,依然执行提交到 B。
由于想出不来,当 PageA.IsValid = false 的时候,如何取消跨页提交定向到B,所以只好在 PageB 中处理了:
通过访问 PageB.PreviousPage.IsValid 确认提交页验证是否通过
A.aspx
<form id="form1" runat="server">
<div>
Email:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
Display="Dynamic" EnableClientScript="False" ErrorMessage="Required"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" EnableClientScript="false"
Display="Dynamic" ErrorMessage="Wrong email format!" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" EnableTheming="True" EnableViewState="False"></asp:RegularExpressionValidator>
<br />
<asp:Button ID="Button2" runat="server" Text="Post to this page" />
<asp:Button ID="Button1" runat="server" PostBackUrl="b.aspx" Text="Post to anther page" /></div>
</form>
<div>
Email:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
Display="Dynamic" EnableClientScript="False" ErrorMessage="Required"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" EnableClientScript="false"
Display="Dynamic" ErrorMessage="Wrong email format!" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" EnableTheming="True" EnableViewState="False"></asp:RegularExpressionValidator>
<br />
<asp:Button ID="Button2" runat="server" Text="Post to this page" />
<asp:Button ID="Button1" runat="server" PostBackUrl="b.aspx" Text="Post to anther page" /></div>
</form>
B.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) { // 当前请求为跨页提交
if (!PreviousPage.IsValid) { // 提交页验证失败
//Response.Redirect(Request.UrlReferrer.AbsolutePath); // 直接重定向导致,用户输入信息丢失
Response.Write("<script>alert('验证失败。');history.back()</" + "script>"); // 有点 hack 味道,但是可以保持部分信息
Response.End();
return;
}
}
}
{
if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) { // 当前请求为跨页提交
if (!PreviousPage.IsValid) { // 提交页验证失败
//Response.Redirect(Request.UrlReferrer.AbsolutePath); // 直接重定向导致,用户输入信息丢失
Response.Write("<script>alert('验证失败。');history.back()</" + "script>"); // 有点 hack 味道,但是可以保持部分信息
Response.End();
return;
}
}
}
附:
事实上,自己很少使用 Button.PostBackUrl ,对 PostBackUrl 的实现机制还有点误解,以为还是先提交到当前页,然后再 Redirect 到目标页,还傻乎乎的在 CSDN 里面乱吼,http://community.csdn.net/Expert/TopicView3.asp?id=5677458 ,真是惭愧。看了 function WebForm_DoPostBackWithOptions(options) 才知道,原来真的是设置了 form.action 直接提交到了目标页。
关于内部原理,明天再研究了。