DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> TextBoxWatermarkExtender擴展器與RequiredFieldValidator控件相沖突的解決方案
TextBoxWatermarkExtender擴展器與RequiredFieldValidator控件相沖突的解決方案
編輯:AJAX詳解     
在使用AJax CONTROL TOOLKIT擴展器TextBoxWatermarkExtender擴展器時,我們常常需要聯合使用ASP.Net校驗器控件RequiredFIEldValidator。但這樣以來,當用戶沒有在文本框中輸入文字時,TextBoxWatermarkExtender擴展器的WatermarkText屬性將在文本框中加入水印效果文字於是出現一個問題:無論用戶是否在文本框中輸入了內容,文本框的內容終不會為空。也就是說,此文本框將始終能夠通過校驗器控件RequiredFIEldValidator的驗證。

如之奈何?

  解決辦法
 


 

針對上面的矛盾問題,我下面給出幾種典型的克服辦法。

方法一:借助於CustomValidator控件

借助於CustomValidator的客戶端腳本函數可以從客戶端對文本框內容進行校驗。
示例如下:

用戶名:<ASP:textbox id="UserName" runat="server"></ASP:textbox>
<ASP:RequiredFIEldValidator id="rfN" runat="server" ErrorMessage="姓名不能為空!"
    ControlToValidate="UserName"></ASP:RequiredFIEldValidator>
<AJaxToolkit:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender1" runat="server" TargetControlID="UserName"  WatermarkText="請在此輸入姓名">
</AJaxToolkit:TextBoxWatermarkExtender>
<ASP:CustomValidator ID="CustomValidator1" runat="server" ClIEntValidationFunction="validateUserName" ErrorMessage="請在此輸入姓名"
ControlToValidate="UserName" Display="Dynamic">*</ASP:CustomValidator>


再來看ClIEntValidationFunction屬性對應內容,如下所示:
   <script. type="text/Javascript">
        function validateUserName(sender, args) {
            if (args.Value == "請在此輸入姓名") {
                args.IsValid = false;
            }
        }
............



評價:此方案把校驗交給了客戶端JS腳本。上面的函數validateUserName實現了把文本框內容與水印文字對照。如果是原來的水印文字則認為文本框仍然沒有輸入內容,從而保持了校驗器控件RequiredFIEldValidator的原有的驗證效果


方法二:借助於雙重RequiredFIEldValidator控件

不種方法不需借助於客戶端腳本函數便可以保留
校驗器控件RequiredFIEldValidator對文本框內容的校驗功能。請看下面的示例代碼

<asp:TextBox ID="tbUsername" runat="server"  Width="60%" MaxLength="50"></ASP:TextBox>
<asp:RequiredFIEldValidator ID="rfNameBlank" runat="server" ControlToValidate="tbUsername" Display="none" ErrorMessage="用戶名稱不能為空!"></ASP:RequiredFIEldValidator>
<asp:RequiredFIEldValidator ID="rfNameValue" runat="server" ControlToValidate="tbUsername" Display="none" InitialValue="請輸入用戶名稱" ErrorMessage="用戶名稱不能為空!"></ASP:RequiredFIEldValidator>
<asp:RegularExpressionValidator ID="revName" runat="server" ControlToValidate="tbUsername" Display="none" ErrorMessage="用戶名稱的長度最大為50,請重新輸入。" ValidationExpression=".{1,50}"></ASP:RegularExpressionValidator>
<AJaxToolkit:TextBoxWatermarkExtender ID="wmeName" runat="server" TargetControlID="tbUsername" WatermarkText="請輸入用戶名稱" WatermarkCSSClass="Watermark"></AJaxToolkit:TextBoxWatermarkExtender>
<AJaxToolkit:ValidatorCalloutExtender ID="vceNameBlank" runat="server" TargetControlID="rfNameBlank" HighlightCSSClass="Validator"></AJaxToolkit:ValidatorCalloutExtender>
<AJaxToolkit:ValidatorCalloutExtender ID="vceNameValue" runat="server" TargetControlID="rfNameValue" HighlightCSSClass="Validator"></AJaxToolkit:ValidatorCalloutExtender>
<AJaxToolkit:ValidatorCalloutExtender ID="vceNameRegex" runat="server" TargetControlID="revName" HighlightCSSClass="Validator"></AJaxToolkit:ValidatorCalloutExtender>


當然,上面代碼中,你可以省略使用另一種擴展器控件ValidatorCalloutExtender。

另外兩種可能的解決方案

除了上述二法,還有
另外兩種可能的解決方案如下:

第一種是借助於Page.Validate()方法對輸入進行驗證。這種方法實現起來比較簡單,但卻喪失了
校驗器控件RequiredFIEldValidator原有的客戶端校驗功能,而且引發一次不必要的頁面回送。

第二種方法是使用RegularExpressionValidator取代
RequiredFIEldValidator,即使用正則表達式來進行驗證,只是嫌寫起來比較麻煩,但保留了校驗器控件RequiredFIEldValidator原有的客戶端校驗功能,亦不失為一種辦法。
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved