【问题标题】:Validation (Page_ClientValidate('mygroup')) returns always true after postback回发后验证 (Page_ClientValidate('mygroup')) 始终返回 true
【发布时间】:2014-12-23 22:27:20
【问题描述】:

我有一个页面,我做了一些验证,我所有的验证都是客户端预期的,它使用服务器验证。所以我的问题是当我触发服务器端验证和页面回发时,这个函数 Page_ClientValidate('mygroup') 返回 true,所以我失去了验证,尽管我的必填字段不是。

function DoValidation() { var validated = Page_ClientValidate('NewMemberRequired'); Page_BlockSubmit = false; return validated; }

<telerik:RadButton ID="btnSave" runat="server" Text="Save & Close" OnClick="btnSave_Click" CausesValidation="true"
                                OnClientClick="return DoValidation();">

//the fields 
<asp:RequiredFieldValidator ID="AddressRequired" runat="server" ControlToValidate="Address"
                        CssClass="ErrorMessage" ErrorMessage="Required"ValidationGroup="mygroup"><asp:RequiredFieldValidator/>

//an other filed with postback=true
<telerik:RadTextBox ID="age" runat="server"  AutoPostBack="True" OnTextChanged="age_TextChanged">

【问题讨论】:

  • 您应该对所有可发布字段进行客户端和服务器端验证。

标签: javascript jquery asp.net validation telerik


【解决方案1】:
  1. 阅读有关使用 RadButton 的客户端事件的文档,因为即使不会导致错误,您的方法也不起作用:http://www.telerik.com/help/aspnet-ajax/button-onclientclicking.html。这也有帮助:http://blogs.telerik.com/aspnet-ajax/posts/12-08-10/migrating-onclientclick-handlers-from-asp-button-to-telerik-s-asp-net-ajax-button.aspx

  2. 阅读有关执行自定义验证的文档:http://www.telerik.com/help/aspnet-ajax/button-validation-with-postback-confirm.html

  3. 确保您的验证组没有问题,因为在提供的 sn-p 中它们不匹配

  4. 文本框的 AutoPostBack=true 将在您删除其文本时将其回发,无论此设置中的验证器如何

下面是一些验证良好的代码:

        <telerik:RadButton ID="btnSave" runat="server" Text="Save & Close" OnClick="btnSave_Click" CausesValidation="true"
                           OnClientClicking="DoValidation">
        </telerik:RadButton>
        //the fields
        <asp:RequiredFieldValidator ID="AddressRequired" runat="server" ControlToValidate="Address"
                                    CssClass="ErrorMessage" ErrorMessage="Required" ValidationGroup="mygroup">
        </asp:RequiredFieldValidator>

        //an other filed with postback=true
        <telerik:RadTextBox ID="Address" runat="server" AutoPostBack="True" OnTextChanged="age_TextChanged" ValidationGroup="mygroup" CausesValidation="true">
        </telerik:RadTextBox>

        <script>
            function DoValidation(sender, args) {
                var validated = Page_ClientValidate('mygroup');
                args.set_cancel(!validated);
                Page_BlockSubmit = false;
            }
        </script>

变化:

  1. 正确使用 OnClientClicking 事件

  2. 正在设置正确的验证组

  3. CausesValidation=true 用于 etxtbox,因此删除其文本将导致验证并阻止回发

【讨论】:

  • +1 我没有使用telerik,但这解决了我的问题,因为我的控件上没有causesValidation,并且将表单的名称而不是validationGroup传递给Page_ClientValidate() .只是设置验证的一个很好的例子。我没有意识到我把它搞砸了,因为它似乎仍然可以正常工作,除了 Page_ClientValidate 总是 true
猜你喜欢
  • 1970-01-01
  • 2014-02-10
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多