ASP.NET页面存在字段验证器时无法点击返回按钮如何解决?
问题根本原因
ASP.NET 服务端验证控件默认会拦截页面内所有触发回发的按钮操作,先执行全局校验逻辑,校验不通过就会阻止后续的按钮执行逻辑,因此你点击返回按钮时会先触发必填字段校验,未填完时就无法正常跳转。
可行解决方案
- 方案1:直接关闭返回按钮的验证触发逻辑(最简便)
给你的返回按钮添加CausesValidation="False"属性即可,按钮触发回发时会跳过所有验证逻辑,示例代码如下:<asp:Button ID="btnBack" runat="server" Text="返回" CausesValidation="False" PostBackUrl="~/目标跳转页面.aspx" /> - 方案2:通过验证组(ValidationGroup)隔离不同操作的验证逻辑
如果页面同时存在提交(需要校验)和返回(不需要校验)两类操作,可以给需要校验的输入框、验证器、提交按钮绑定同一个验证组,返回按钮不绑定该组即可避免触发对应校验,示例代码如下:<!-- 输入框和验证器绑定同一个验证组 --> <asp:TextBox ID="tbInformation" runat="server" TextMode="MultiLine" Height="130px" Width="550px" ValidationGroup="submitGroup" /> <asp:RequiredFieldValidator runat="server" ID="rfvInformation" ControlToValidate="tbInformation" ErrorMessage="*Required*" ValidationGroup="submitGroup" /> <!-- 提交按钮绑定相同验证组,点击时仅触发该组的验证逻辑 --> <asp:Button ID="btnSubmit" runat="server" Text="提交" ValidationGroup="submitGroup" /> <!-- 返回按钮不绑定验证组,不会触发任何校验 --> <asp:Button ID="btnBack" runat="server" Text="返回" PostBackUrl="~/目标跳转页面.aspx" /> - 方案3:使用原生跳转标签完全绕开回发逻辑
如果返回按钮仅需要跳转、不需要和服务端交互,直接用HTML原生的<a>标签即可,不会触发任何页面回发和验证逻辑:<a href="目标跳转页面地址">返回</a>
内容的提问来源于stack exchange,提问作者questionator
相关产品推荐
相关产品推荐

