我有一個簡單的方法:如果勾選'yes'單選按鈕比使文本框處於必需狀態。我提供了客戶端和服務器端驗證。我發現的是:CustomValidator在客戶端觸發,但驗證失敗時驗證控件不呈現
- 客戶端驗證通過警報消息觸發並正確顯示故障。
- 驗證控件從不呈現錯誤消息,並且服務器被擊中。
- 當服務器被擊中且驗證失敗時,控件呈現正確的錯誤消息。
爲什麼客戶端在驗證方面工作正常,但不會呈現錯誤消息並繼續到服務器?
asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<script src="Scripts/jquery-1.7.2.js" type="text/javascript"></script>
<script type="text/javascript">
function testClientValidation(src, args) {
if ($('#<%=rblstTest.ClientID%>' + ' input:checked').length == 1) {
if ($('#<%=rblstTest.ClientID%>' + ' input:checked').val().toLowerCase() == "yes") {
args.isValid = !($('#<%=txtTest.ClientID%>').val() == "");
} else {
args.isValid = true;
}
} else {
args.isValid = true;
}
alert(args.isValid);
}
</script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<div>
<asp:RadioButtonList ID="rblstTest" RepeatDirection="Horizontal" RepeatLayout="Flow" runat="server">
<asp:ListItem>Yes</asp:ListItem>
<asp:ListItem>No</asp:ListItem>
</asp:RadioButtonList>
<asp:TextBox ID="txtTest" runat="server"/>
<asp:CustomValidator ID="cust" ControlToValidate="rblstTest"
OnServerValidate="testSeverValidation"
ClientValidationFunction="testClientValidation"
Display="Dynamic"
ErrorMessage="Error!" runat="server"/>
<asp:LinkButton runat="server" ID="lnkSubmit" Text="Submit" />
</div>
</asp:Content>
被接受的答案是沒有作用的,未來的使用者檢查。原因是,客戶端代碼正在通過單擊「是」或「否」將用戶發送到服務器(代碼隱藏)。但事實並非如此。如果頁面在客戶端正確驗證,用戶應該移動到代碼後面。你被要求再次進行審查 – Pankaj 2012-04-19 15:53:39
@Guest問題,據我所知,這個問題是,即使客戶端驗證失敗,錯誤不會顯示,回發完成。這是因爲值true或false被設置爲args參數的錯誤成員。一旦設置爲糾正一個'IsValid',並且如果該值爲假,則停止向服務器提交頁面並顯示錯誤 – Ramesh 2012-04-20 00:46:06
在OP中,它總是重定向到服務器。驗證與否 – Pankaj 2012-04-20 05:11:46