2012-01-12 24 views
2

一些建議後,我的解釋是用於以下情形正確:MVC3 .NET - 當使用客戶端驗證場景

它創建/更新

簡單的畫面(2周獨立的觀點 - 創建視圖和更新視圖)的用戶記錄。

屏幕包含3個字段: 名稱, 電話號碼, 國民保險號碼(NI號)

我們有驗證: 電話號碼(以確保它是正確的格式) NI數(以確保它是正確的格式)

上有NI數唯一索引在數據庫中

這是我的理解 - 以人告訴我這是錯誤的或者是有BETT完全開放呃...

因此,如果輸入新記錄,我們需要檢查NI編號是否唯一 - 因此我們必須POST和運行服務器端驗證 - 這意味着Javascript驗證是無關緊要的 - 並且所以所有的驗證都必須在服務器端進行。

如果從數據庫中檢索記錄然後更新記錄,如果NI編號未更新,則客戶端驗證是相關的。因爲我總是需要確保NI編號是唯一的,所以我不需要任何客戶端驗證例程,而對於更新視圖,我確實需要客戶端驗證例程作爲NI編號可能不會更新,但我們仍然希望驗證其他字段(需要的話)客戶端,以儘量減少網絡流量。

對嗎?

感謝

回答

0

客戶端驗證是基本的規則,如需要的領域,手機格式,範圍之間的號碼等客戶端驗證的最大好處是,你的服務器將具有更少的開銷(因爲未完成的表單將永遠不會發布),並且會給您的客戶帶來更好的體驗,因爲他不需要等待服務器響應。

服務器端驗證是爲基本規則和複雜規則喜歡獨特的領域,在另一個系統查找等。所以,是的,你會複製這些規則。

我目前使用的是Fluent Validation + Unobtrusive Client Side Validation,它使我能夠使用客戶端和服務器端驗證,而無需重複代碼。如果驗證是複雜的,它將不會在客戶端可用,但基本驗證將在雙方執行。最重要的是,我只需要編寫一次規則。順便說一句,它也適用於ASP.NET MVC 3默認驗證引擎Data Annotations。

+0

感謝您的快速響應 - 只是爲了澄清 - 複雜的驗證,如獨特性,即。 NI編號是在服務器上完成的,因此在這種情況下客戶端驗證代碼變得無關緊要 - 所以讓服務器進行所有驗證。如果現有記錄更新且NI未更改,則客戶端代碼是相關的。 – user1079925 2012-01-12 12:31:58

+0

爲什麼它不相關?當名稱或電話號碼不正確時,客戶端驗證可防止到服務器的旅程。只有當這些字段是正確的,你將不得不在服務器上檢查NI(這也可以通過Ajax進行) – Pbirkoff 2012-01-12 15:38:45