解決CustomValidator控制項不能驗證控制項值為空白的問題

來源:互聯網
上載者:User

在論壇上看到有關CustomValidator控制項驗證控制項值為空白的問題http://community.csdn.net/Expert/topic/3772/3772658.xml?temp=.9461634,正好我也遇到過,解決方案就是不要指定CustomValidator 控制項的ControlToValidate,這樣在提交的時候回進行驗證
,代碼如下:
<%@ Page Language="C#" AutoEventWireup="True" %>

<html>
<head>
</head>
<body>

   <form runat="server" id="Form1" >
      <asp:TextBox id="Text1"
           runat="server" />

      <asp:CustomValidator id="CustomValidator1"
           ClientValidationFunction="ClientValidate"
           Display="Static"
           ErrorMessage="不可為空!"
           ForeColor="green"
           Font-Name="verdana"
           Font-Size="10pt"
           runat="server"/>
 <br/>
      <asp:Button id="Button1"
           Text="Validate"
           runat="server"/>
   </form>
 
</body>
</html>

<script language="javascript">
<!--
function ClientValidate(sender, args)
{
 if(Form1.Text1.value.length<=0)
 {
  args.IsValid = false;
 }else{
  args.IsValid = true;
 }
}
// -->
</script>

問題分析:
與所有其它驗證控制項類似(RequiredFieldValidator 除外),如果輸入欄位為空白,則認為 CustomValidator 有效。所以造成CustomValidator沒有辦法驗證空值, 讓ControlToValidate 為空白,用戶端函數每次嘗試提交時總會觸發一次,這樣就可以實現在提交時驗證控制項為空白
以下資訊摘自MSDN:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfSystemWebUIWebControlsCustomValidatorClassTopic.asp

注意   如果輸入控制項為空白,則不會調用任何驗證函式,並且驗證將成功。使用 RequiredFieldValidator 控制項要求使用者在輸入控制項中輸入資料。

可以在不設定 ControlToValidate 屬性的情況下使用 CustomValidator 控制項。這種情況通常出現在驗證多個輸入控制項或是驗證無法與驗證控制項一起使用的輸入控制項(如 CheckBox 控制項)時。這種情況下,傳遞給 ServerValidate 事件的事件處理常式及用戶端驗證函式的 arguments 參數的 Value 屬性將始終包含一個Null 字元串 ("")。但是,合適時仍將調用這些驗證函式,以確定伺服器和用戶端的有效性。若要訪問進行驗證的值,您必須通過編程方式引用所要驗證的輸入控制項,然後從相應的屬性中檢索該值。例如,若要驗證伺服器上的 CheckBox 控制項,請不要設定驗證控制項的 ControlToValidate 屬性,並將下列代碼用於 ServerValidate 事件的處理常式。

用途:
您可能會說既然不為空白,幹嘛不用RequiredFieldValidator,當然是有原因的,比如我有個複選框,我想實現只有選擇這個複選框的時候才要求某個文字框不為空白,這樣我就可以用下面的代碼了:
<%@ Page Language="C#" AutoEventWireup="True" %>

<html>
<head>
</head>
<body>

   <form runat="server" id="Form1" >
   <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
      <asp:TextBox id="Text1"
           runat="server" />

      <asp:CustomValidator id="CustomValidator1"
           ClientValidationFunction="ClientValidate"
           Display="Static"
           ErrorMessage="不可為空!"
           ForeColor="green"
           Font-Name="verdana"
           Font-Size="10pt"
           runat="server"/>
 <br/>
      <asp:Button id="Button1"
           Text="Validate"
           runat="server"/>
   </form>
 
</body>
</html>

<script language="javascript">
<!--
function ClientValidate(sender, args)
{
 if(Form1.CheckBox1.checked&&Form1.Text1.value.length<=0)
 {
  args.IsValid = false;
 }else{
  args.IsValid = true;
 }
}
// -->
</script>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.