簡體   English   中英

ASP.NET自定義驗證器未觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM