當前位置:開發者網絡 >> 技術教程 >> ASP教程 >> 組件開發 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
解決CustomValidator控件不能驗證控件值為空的問題
作者:未知
日期:2005-02-28
人氣:
投稿:snow(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
在論壇上看到有關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 屬性將始終包含一個空字符串 ("")。但是,合適時仍將調用這些驗證函數,以確定服務器和客戶端的有效性。若要訪問進行驗證的值,您必須通過編程方式引用所要驗證的輸入控件,然後從相應的屬性中檢索該值。例如,若要驗證服務器上的 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>


相關文章: