2

在ASP.NET a RequiredFieldValidator中仍然驗證了文本框控件,即使我在客戶端禁用它。我想通過使用CustomValidator擺脫此行爲。在驗證功能中,我檢查是否啓用了文本框。如果是這種情況,我將驗證器設置爲有效。客戶端禁用的文本框仍在服務器端啓用

function ValidateTextBox(sender, args) { 

    var $textbox = $('#txtFoo') 
    args.isValid = $textbox.prop('disabled') || $textbox.val(); 

} 

這在客戶端很好地工作。問題是,我使用JavaScript更改了客戶端上的文本框的狀態。因此,服務器不知道更改的狀態(即現在禁用了文本框控件)。因此,當引發自定義驗證程序的事件(例如通過調用Page.Validate)時,我無法檢查文本框是否已禁用。因爲服務器不知道這個,所以無論我在客戶端做什麼,Enabled屬性總是設置爲true。
如何在禁用時禁用對控件的驗證,或在Postback期間告訴服務器文本框的狀態?

謝謝你的時間。

+0

可以將服務器從其他控件的狀態告訴(文本框或休息時間的頁面)文本框是否會在客戶端被禁用?驗證最安全的方法就是複製當前客戶端的邏輯,因爲無論如何,所有客戶端腳本和表單值都可以通過常用的調試工具進行更改。 –

+0

這肯定會起作用。我正在使用用戶控件將標籤輸入字段和驗證程序組合到一個控件中。如果控件可以自動處理它,而不必依賴它所使用的頁面代碼,那將會很好。我的意思是這是ASP.NET驗證控件的優點。您不必手動檢查每個控件的狀態。你只需要調用Page.Validate,一切都很好。 – chrinetr

+0

當使用JavaScript更改文本框的值時,服務器知道該值,因爲它的值將被髮送回服務器。是否可以使用此機制將文本框的禁用狀態與其值一起發送? – chrinetr

回答

0
  1. 而不是讓'disabled'嘗試將文本框設置爲'ReadOnly'模式。

  2. 您可以EnableDisableRequiredFieldValidator在要禁用使用ValidatorEnable JavaScript方法 (reference