2011-05-28 81 views
4

我有一個CustomValidator,用於檢查在文本框中輸入的文本是否與數據庫中的某些字段匹配。這一切都很好,但從那以後我已經修改了我的頁面,並且不再有效。我不認爲我改變了會影響這一點的任何事情,但顯然我做到了。我所有的其他驗證器(必需字段驗證器)都正常工作,但我的CustomValidator沒有響應。CustomValidator不工作

所以無論如何,這裏是我的代碼:

的CustomValidator:

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtCoursePrefix" ErrorMessage="Course number is already taken."></asp:CustomValidator> 

VB代碼隱藏:

Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate 

    'Checking for duplicate course numbers 

    'get values 
    Dim checkPrefix = txtCoursePrefix.Text 
    Dim checkNum = txtCourseNum.Text 

    'db connectivity 
    Dim myConn As New OleDbConnection 
    myConn.ConnectionString = AccessDataSource2.ConnectionString 
    myConn.Open() 

    'select records 
    Dim mySelect As New OleDbCommand("SELECT 1 FROM tableCourse WHERE prefix=? AND course_number=?", myConn) 
    mySelect.Parameters.AddWithValue("@checkPrefix", checkPrefix) 
    mySelect.Parameters.AddWithValue("@checkNum", checkNum) 

    'execute(Command) 
    Dim myValue = mySelect.ExecuteScalar() 

    'check if record exists 
    If myValue IsNot Nothing Then 
     CustomValidator1.SetFocusOnError = True 
     args.IsValid = False 
    End If 

End Sub 

一切工作,直到CustomValidator1.SetFocusOnError = True和args.IsValid =假。我測試了If語句,並且它的工作正常,它返回true,我放入其中的任何內容都會執行。

+0

你的代碼似乎沒問題,問題一定在別的地方。 – 2011-05-28 17:51:58

+0

是的,這就是我的想法......不知道可能會干擾什麼。 – Sara 2011-05-28 17:53:15

+0

您是否在表單上設置了驗證組?如果是這樣,您需要將'validationgroup'屬性添加到''標記中。 – 2011-05-28 21:27:52

回答

0

使用此

OnServerValidate = 「CustomValidator1_ServerValidate」

像一個例子,它會工作....

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtCoursePrefix" ErrorMessage="Course number is already taken." OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator> 

拉夫阿格拉瓦爾

+0

沒有工作......因爲它已經被調用了,因爲我在後面的代碼中有「處理CustomValidator1.ServerValidate」。 – Sara 2011-05-31 00:32:03

0

首先,把驗證組在驗證器和按鈕上。如果這也不起作用,把OnClientClick ='CheckValidate();'並聲明將與參數..驗證組一起調用page_clientvalidate方法的函數。這肯定會奏效。如果這不起作用,將調試器放在javascript方法中並調試相同

1

如果處理程序正在調用,並且您成功地將args.IsValid設置爲false,那麼它會將Page.IsValid設置爲假。但不幸的是,這並不能阻止這種形式被套用。你需要做的是檢查處理表單提交的代碼中的Page.IsValid屬性,就像在提交按鈕處理程序中一樣。

所以除了您發佈的代碼,這聽起來像它正常工作,請確保你有這樣的事情您提交處理(C#示例):

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    if (!Page.IsValid) 
    { 
     // by simply returning, the error message for the CustomValidator will be displayed 
     return; 
    } 
    // do processing for valid form here 
} 
7

事情你應該知道什麼時候使用customvalidators:

如果您使用ValidationGroup進行驗證,請不要忘記將其添加到您的CustomValidator

設置ControlToValidate屬性。

A CustomValidator控制器在ControlToValidate控件爲空時除非您設置爲ValidateEmptyText=true,否則不會觸發。

當使用ClientValidationFunction="customClientValidationFunction"使用下面的簽名:

function customClientValidationFunction(sender, arguments) { 
    arguments.IsValid = true; //validation goes here 
} 
3

你應該設置該屬性ValidateEmptyText="true"CustomValidator。在這種情況下,客戶端和服務器功能將始終被調用。

它解決了我的問題。

+0

好的一個我很困惑這個簡單的事情,我GOOGLE了一下,找到你的答案 – 2013-10-17 05:35:46