2009-07-06 81 views
0

我正在嘗試通過本教程 tutorial。本教程似乎做了我一直在尋找的所有內容,但我無法理解它。somone能幫助我更好地理解本教程嗎?

也許是因爲我不太瞭解Xval,jquery.validate。

1st 他似乎在使用類型化視圖:RemoteValidation.Models.User。如果我想傳遞一些其他數據會發生什麼,我怎麼會得到這個?我是否必須創建另一個班級用戶模型和我想要的其他內容?

第二

我通過文章混淆了很多,因爲這是suppost要像客戶端和服務器端的validtion但他隨後補充道線,如

「//添加可選的正則表達式驗證,以儘量減少Ajax請求」

所以對我來說這rasies我的問題還以爲他們已經在這個地方:

[RegularExpression(EmailRegEx, ErrorMessage = "Invalid e-mail address.")]」 

然後他有這個

「例如,所有你需要實現服務器和密碼強度遠程客戶端驗證是這樣的:」

public class IsSafePasswordAttribute : RemotePropertyValidator 
{ 

public IsSafePasswordAttribute() 
{ 
//perform some simple password strength check with a regular expression 
//on the client side first 
ClientSideRegEx = 「.{8,20}」; 
} 

protected override bool PropertyValid(object value) 
{ 
//Insert more elaborate server-side/remote client side password checking 
// logic and return result here… 
} 

所以後來如果你讀的評論好像構造函數是爲客戶端和這個PropertyValid是爲服務器端?

這是正確的嗎?如果我只是想爲客戶端和服務器端都做同樣的事情會發生什麼?

但他有這個

protected override bool PropertyValid(object value) 
{ 
return (string)value != 「[email protected]」; 
} 

此代碼獲取運行一樣,如果它只是在客戶端。

我不明白

ClientSideRegEx = 「.{8,20}」; 

首先這個現在確實告訴我,這是隻對客戶方這樣就意味着我將不得不編寫服務器端相同的代碼?我認爲這是不是兩次寫同一代碼的全部目的?

另外,他們沒有這些「[]」之一像他們有需要的範圍?我會認爲這將是一個非常基本的一個,所以你需要做什麼你自己的?

我也不明白他是怎麼知道它是如何輸入的。就像我可以看到的文檔一樣。我知道這是一個正則表達式,但我想知道其他驗證和東西。

[文件的演示]

那麼總體來說,我不知道什麼我應該改變什麼,我可以獨自離開。 就像我開始一個新項目並開始做我的驗證一樣,我是否包含這些文件?

DataAnnotationsModelBinder.cs ExtensionMethods.cs RemoteValidators。cs

當然還有xval文件。 我需要更改任何這些.cs文件嗎?或者我可以按原樣使用它們嗎? 像我剛剛開始繼承「RemotePropertyValidator」,並開始輸入或我必須做一些其他更改?

然後在一個側面說明他們還生產XVAL我一直在尋找的網站和它的只有0.8的(只有測試版還),現在並沒有在一兩個月了更新。我發佈了這個問題,「如果他們仍在開發中」,而且還沒有迴應。

這給了我一種不安的感覺。

感謝

P.S我願意用其他的東西,然後xval的,如果它可以做同樣的事情(容易)。只要它掛上了jquery和asp.net mvc。

回答

1

我只會回答你提出的一些棘手的問題,並解決更大的原則。希望這會對你有所幫助。

1)不,你不必使用強類型視圖。我從來沒有做。就個人而言,我更喜歡MVCContrib強類型viewdata.get(viewdata.get(「user」);)。

2)是的,XVAL(和其他類似的庫)幫你做同樣的東西,在服務器端和客戶端。但是......您必須首先設置驗證規則。

類的東西[必需]或[StringLength]這已經爲你做。但總會有可能你需要更復雜的驗證。在這種情況下,您需要分別定義例程(不同的語言,不同的元素,不同的數據訪問(服務器上的數據庫))。

IsPasswordSafe屬性就是一個很好的例子。構造函數只是設置javascript正則表達式(在這種情況下「。{8,20}」如果值在8到20個字符之間,則返回true) - 非常簡單的檢查。我的假設是,在構造函數中設置字符串之後,負責創建客戶端JavaScript的函數將會讀取它。在服務器端(PropertyValid()方法),你可以做更多的密集的事情 - 檢查字典,檢查用戶以前的密碼等 - 這是不能在本地完成的。

我建議你重讀考慮到上述張貼,並圍繞發揮一點,希望一切都會變得清晰。

就我個人而言,我剛剛開始使用XVAL和我與它非常高興。我還沒有進入自定義驗證(也許你應該開始玩包括DataAnnotations的東西)。但是,xval的一點是你不需要知道任何關於jquery.validate的內容。只要知道服務器端和客戶端並不總是必須 - 有時不能 - 同步,驗證明智。

詹姆斯

+0

謝謝。 雅我再次重新閱讀文章,我的問題已經回答了這個傢伙。現在我已經通過調試器一行一行地瞭解了它,但我更瞭解它。 – chobo2 2009-07-12 14:11:06

0

在我的理解,本文介紹了客戶端驗證的兩種不同的方式:

  1. 遠程客戶端驗證,其中 客戶端發送一個AJAX請求 服務器,要求服務器驗證。 這是不同於純服務器 側驗證,因爲它不 要求頁面重新加載。該文章顯示 如何執行遠程客戶端驗證 沒有任何額外的代碼。

  2. 純客戶 驗證,這就是 ClientSideRegEx用於 - 在 這種情況下,沒有服務器的請求 可言,但需要更多的代碼。

至於RemoteValidation.Models.User - 只要在其屬性上使用註釋屬性,您就可以傳遞任何其他類。