2009-12-11 81 views
0

我有一個複選框,它位於usercontrol中,usercontrol位於wizardcontrol中,wizardcontrol位於具有masterpage的內容頁面上。嚮導控件驗證問題中的usercontrol中的自定義驗證器

在嚮導控件完成之前,必須選中該複選框。複選框和customvalidator位於wizardcontrol的最後一步。

現在一切工作正常與Firefox和當我測試它也與ie。但不知何故,其他人可能能夠繼續進行處理,而不必檢查複選框。 該複選框也有一個togglebutton擴展器。我希望這不是問題。

我的內聯JavaScript(在用戶控件)

<script language="javascript" type="text/javascript"> 
    // <![CDATA[ 
    function ValidateTandCs(source, args) 
    { 
     args.IsValid = document.getElementById('<%= cbAV.ClientID %>').checked; 
    } 
    // ]]> 
</script> 

複選框:

<asp:checkbox id="cbAV" runat="server"/> 

的customevalidator和切換按鈕擴展

<asp:CustomValidator 
    ID="rfvAV" 
    Display="Dynamic" 
    runat="server" 
    ControlToValidate="cbAV" 
    ErrorMessage="RequiredFieldValidator" 
    ClientValidationFunction="ValidateTandCs" 
    onservervalidate="rfvAV_ServerValidate"> 
</asp:CustomValidator> 
<ajaxToolkit:ToggleButtonExtender 
    ID="tbeav" 
    runat="server" 
    TargetControlID="cbAV" 
    ImageHeight="15" 
    ImageWidth="15" 
    CheckedImageUrl="~/images/checkbox-on.gif" 
    UncheckedImageUrl="~/images/checkbox-off.gif" /> 

中的CustomValidator背後的代碼

protected void rfvAV_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    args.IsValid = (cbAV.Checked); 
} 

我試圖從customvalidator中刪除客戶端驗證,但是當我只有服務器驗證。它不起作用

回答

0

發現問題。它是JavaScript(clientside)在IE中不起作用。 服務器端驗證,驗證真的很好。但是當你點擊向導控制的完成按鈕時,它沒有發生page.isvalid檢查。所以它只是忽略了無效的驗證器。我的錯。

0

爲什麼在客戶端和服務器端都使用驗證例程?

嘗試移除您的ClientValidationFunction屬性並保留OnServerValidate屬性。

+0

因爲我以前只有客戶端。而且這在IE中似乎不起作用。因此我也添加了一個serverside。 – 2009-12-14 13:34:52

+0

而且,因爲如果它對任何事情都是遠程敏感的,你永遠不應該信任客戶端驗證。如果客戶有點創意,客戶可以繞過它。客戶端驗證方便客戶端。服務器端驗證安全性。 – Mir 2013-03-15 20:30:52