[英]ASP.NET Custom Validator not firing
達成協議:我建立了一個自定義驗證器,該驗證器僅在文本框中有輸入時才觸發。 觸發時,它應該進行測試以查看框中的文本是否為整數,否則將拒絕它。 不過,它不會觸發,我正試圖找出原因。
我將這個空白放在部分c#類的主體中:
protected void intValidate_Validate(object sender, ServerValidateEventArgs arg)
{
int num;
bool isNum = int.TryParse(arg.ToString(), out num);
if(arg.Value.Length>0){
if (isNum)
{
arg.IsValid = true;
}
else
{
arg.IsValid = false;
}
}
else{
arg.IsValid=true;
}
}
驗證器的代碼如下:
<div class="adult">
<label>Adults ($10)</label>
<asp:TextBox runat="server" ID="wAdultLunch" class="adultLunch" MaxLength="2" />
<asp:CustomValidator ID="intValidate" ControlToValidate="wAdultLunch" ErrorMessage="Invalid number" OnServerValidate="intValidate_Validate" Display="Static" runat="server" EnableClientScript="False" ValidateEmptyText="True"></asp:CustomValidator>
</div>
有識之士將不勝感激!
編輯:我附上下面的回發代碼
<asp:Button ID="wSubmit" runat="server" Text="Submit" OnClientClick="return validateForm();" causesvalidation="true"/>
您正在對錯誤的內容進行解析。 實際需要arg.Value
時, arg.ToString()
將為您提供字符串"System.Web.UI.WebControls.ServerValidateEventArgs"
(已經是字符串)
所以,而不是...
bool isNum = int.TryParse(arg.ToString(), out num);
更改為(注意.Value
)...
bool isNum = int.TryParse(arg.Value, out num);
盡管它比實際需要復雜得多。 整個事情可以像這樣更全面地重寫...
protected void intValidate_Validate(object sender, ServerValidateEventArgs arg)
{
int num;
arg.IsValid = int.TryParse(are.Value, out num);
}
這是因為TryParse如果轉換成功將返回true,否則返回false。
最后,可以使用<asp:RequiredFieldValidator ...>
, <asp:CompareValidator Operator="DataTypeCheck" Type="Integer" ...>
和<asp:RangeValidator ...>
驗證程序來實現所有這些<asp:CompareValidator Operator="DataTypeCheck" Type="Integer" ...>
控制。
UPDATE
正如OP指出的那樣,當文本框為空時,他不希望出現此錯誤,因此請嘗試...
protected void intValidate_Validate(object sender, ServerValidateEventArgs arg)
{
if (args.Value.Length > 0)
{
int num;
arg.IsValid = int.TryParse(are.Value, out num);
}
else
{
arg.IsValid = true;
}
}
@HansKesting已經指出了這一點……只有通過所有客戶端驗證后,才能調用此方法。 一旦客戶端驗證失敗,則將表單提交回服務器的操作也將被取消。
我不知道它是否相關,但是我遇到了自定義驗證器無法觸發的問題。 我驗證了一個dropdownlist,它的默認值為空字符串。 我必須設定
ValidateEmptyString="true"
然后它開始正常工作。
您還可以調用Validate()函數並從自定義驗證程序控件中讀取IsValid屬性。 但是,Page的驗證功能應該可以正常工作,並且不需要這樣的調用。
我想如果驗證通過,您有一個服務器端事件要執行。 例如:按鈕單擊事件。 在這種情況下,如果您檢查Page.IsValid,那么如果驗證通過,它將為false,則Page.IsValid將為true。 您需要使用Page.IsValid來檢查驗證是否通過。
在前端,嘗試將CausesValidation屬性設置為true,如下所示。 看看是否有幫助。
<asp:Button ID="btnSubmit" Text="Submit" CausesValidation="true" runat="server" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.