2016-08-16 24 views
1

在我的WebForms應用程序中,我有一個CustomValidator控件。該控件執行我創建的JavaScript函數。如果這個函數返回false,表單將不會提交。該驗證器與標準RequiredFieldValidatorRegularExpressionValitors一起使用。WebForms - 自定義驗證器不再工作

然而,現在這用於完美地工作,即使JavaScript函數返回false,頁面仍然會提交。由於某種原因,CustomValidator被忽略。只要RequiredFieldValidatorRegularExpressionValidator控件通過,即使JavaScript函數在提交時顯示錯誤,頁面也會提交。

我調試了JavaScript函數,它肯定會返回false。我沒有使用任何服務器端代碼與我的CustomValidator

的JavaScript:

function validateForm() { 
    if (document.getElementById("DDApplicationID").selectedIndex > 0 
     && document.getElementById("div_applicationType").style.display != "none") { 
     return true; 
    } 
    else if (document.getElementById("DDApplicationID").selectedIndex > 0) { 
     var valid = true; 

     ((validateTrainStation() == false) ? valid = false : valid); 
     ((validateSupportType() == false) ? valid = false : valid); 
     ((validateHomeStatus() == false) ? valid = false : valid); 
     ((validateOtherNationality() == false) ? valid = false : valid); 
     ((validateOtherHomeStatus() == false) ? valid = false : valid); 
     ((validateSortCode() == false) ? valid = false : valid); 
     ((validateCareLeaverMessage() == false) ? valid = false : valid); 

     return valid; //returns false in JavaScript debugger on Chrome 
    } 
} 

Web窗體的.aspx

<form id="Application" runat="server"> 
    <asp:CustomValidator ID="CustomValidator1" runat="server" ValidationGroup="AllValidation" ClientValidationFunction="validateForm"></asp:CustomValidator> 
    <asp:Button ID="SaveLSFApplication" runat="server" Text="Submit Application" OnClick="saveApplication" ValidationGroup="AllValidation" /> 
</form> 

的WebForms .aspx.vb

Sub saveApplication(ByVal sender As Object, ByVal e As EventArgs) 
    If Page.IsValid Then 
     '--- do logic 
    End If 
End Sub 

我知道只是客戶端驗證不夠好,但它的對於只有在滿足特定條件時纔是非可選形式的部分,即當用戶在dro中選擇「其他」時我們希望他們在文本框中輸入一個理由。

回答

1

我自己修復了這個問題。即使JavaScript函數返回false,這在控件的上下文中也沒有任何意義。爲了防止表單提交,CustomValidator評估屬性IsValid。如果IsValidfalse,那麼表單將不會提交。

這是修訂後的JavaScript函數來反映這種變化:

function validateForm(sender, args) { //added two function parameters 
    if (document.getElementById("DDApplicationID").selectedIndex > 0 
     && document.getElementById("div_applicationType").style.display != "none") { 
     return true; 
    } 
    else if (document.getElementById("DDApplicationID").selectedIndex > 0) { 
     var valid = true; 

     ((validateTrainStation() == false) ? valid = false : valid); 
     ((validateSupportType() == false) ? valid = false : valid); 
     ((validateHomeStatus() == false) ? valid = false : valid); 
     ((validateOtherNationality() == false) ? valid = false : valid); 
     ((validateOtherHomeStatus() == false) ? valid = false : valid); 
     ((validateSortCode() == false) ? valid = false : valid); 
     ((validateCareLeaverMessage() == false) ? valid = false : valid); 

     args.IsValid = valid; //no longer returning valid 
    } 
} 

正如你所看到的,我已經添加了兩個函數的參數,senderargs。然後,我不再簡單地返回valid,而是將args參數的屬性IsValid設置爲值valid。所以,如果validfalse,那麼IsValid是錯誤的。然後對這個IsValid進行評估,然後阻止表單繼續提交。