簡體   English   中英

自定義驗證客戶端忽略無效狀態

[英]Custom validation client side ignores invalid state

我想做一個定制的驗證器來檢查給定名稱的對象是否已經存在於數據庫中。 WS正常工作,並且arg.IsValid當我取消注釋Page_ClientValidate();時,將arg.IsValid設置為false,但是Page_ClientValidate(); 函數進入無限循環(我猜它運行了為什么所有的驗證器函數),但是它返回false,但是當提交頁面時,驗證器開始返回true O.o'。

如果txtname無效,如何中止回txtname 我懷疑這是因為當我按下按鈕smsCodeValidator實際上運行但由於回發而中止

<asp:CustomValidator 
  ID="cvtxtSMSCode" 
  runat="server" Display="Dynamic" 
  ControlToValidate="txtName" 
  EnableClientScript="true"
  ClientValidationFunction="$U.nameValidator" 
  ForeColor="Red" 
  ErrorMessage="already exists" 
  ValidationGroup="vgName">
</asp:CustomValidator>

nameValidator: function (source, arg) {
    $.ajax({
        type: "POST",
        url: "/../../../../WS/Utility.asmx/NameValidator",
        data: JSON.stringify({ "toTest": arg.Value }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            if (result.d == true) {
                arg.IsValid = true;
                $(source).hide();
                return;
            }
            else {
                $(source).show();
                arg.IsValid = false;
                alert(arg.IsValid);
                //Page_ClientValidate();
                return;
            }
        }
    });
},

<asp:Button ID="btnSave" ValidationGroup="vgName" 
runat="server" 
OnClick="btnSaveChanges_Click"
Text="Save" />

我相信您會進入無限循環,因為您在知道頁面處於無效狀態時正嘗試驗證該頁面。

Page_ClientValidate()將依次調用每個驗證器,以確保它們已觸發,當它到達您的自定義驗證器時,您將再次啟動它,這將導致您看到的遞歸。 更好的選擇是檢查Page_IsValid的值,而其他驗證程序也將其保持最新。

最后,不要忘記,如果文本框為空,則不會調用驗證器,您還需要在該字段上具有必需的字段驗證器。

可以在MSDN文章“ ASP.Net深度驗證”中找到更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM