2013-01-31 91 views
0

我之後,從那些誰使用MVC3開發的網站一些建議來的。驗證使用C#,MVC3和JQuery

我讀過,驗證應在兩個瀏覽器(JQuery的)和服務器(控制器)的水平進行編碼。但是,如果大部分驗證依賴於從後端檢索信息(即數據庫/單例),那麼在瀏覽器端編碼大量驗證時有什麼意義(爲什麼不在控制器級進行驗證)呢?

一個例子:常量保持在後端,即最小年齡,例如20。爲了保存這些信息/在瀏覽器中使用它進行驗證,您需要從後端檢索這些數據或將它保存在Javascript/JQuery(這是我的假設,可能不正確)作爲一個變量。如果在兩個地方都舉行,並且它改變了值,則兩個代碼需要更新 - 因此使維護成爲一場噩夢。

如果有更好的在前端和後端,請讓我知道,在完成驗證或「最佳實踐」的方式。

感謝

+0

我會推薦看這個http://www.pluralsight-training.net/microsoft/players/PSODPlayer.aspx?author=scott-allen&name=mvc3-building-data-ii&mode=live&clip=0&course=aspdotnet-mvc3-介紹mvc驗證的視頻,在大多數情況下,您不必擔心客戶端驗證問題,因爲該框架將爲您提供幫助。 – Oliver

+0

客戶端驗證是爲了更好的用戶體驗。在看到他們的輸入錯誤之前,他們不必實際提交完整的表格。服務器端驗證可保護數據的完整性。所以客戶端驗證不是必需的,服務器端是。 –

+0

教程的問題在於它們只涵蓋了基本知識。真實世界的場景通常要複雜得多。 如果你有單選按鈕或droplist將您驗證的預阿賈克斯POST作爲「黑客」的客戶端,它們的值並將其更改爲不切換的JavaScript並用源代碼篡改合法的東西 - 還是我太偏執? – user1079925

回答

2

你應該考慮一下這樣說:

  • 客戶端驗證(jQuery的等等)< - 這是一個UX(用戶體驗)功能。如果您可以在客戶端驗證數據,那麼這是很好的,因爲它可以將整個表單的往返行爲保存到服務器,並且只要他移動到另一個字段,用戶就可以知道字段值無效。
  • 服務器端驗證(DataAnnotations等)< - 這是您必須確保數據安全的地方(客戶端JavaScript始終可以被禁用,因此您不能相信來自客戶端的數據已經過驗證正確)

因此,客戶端驗證的方面是您希望應用程序如何響應和用戶友好的問題,而服務器端驗證是確保數據有效的地方。

現在ASP.NET MVC框架將幫助你很多與客戶端驗證。例如,當您使用DataAnnotations時,它將爲您生成客戶端屬性和腳本。您可以閱讀以下文章以獲取基本信息:ASP.NET MVC 2: Model Validation

還有第三方驗證引擎插入到客戶端機制,例如Fluent Validation

不僅僅是谷歌周圍一點點,你挑。

+0

我第二@tpeczek。另外客戶端驗證還可以節省您的服務器服務器上的不必要的請求 – Adil

+0

@tpeczek - 你會驗證一個單選按鈕的值在JQuery中的有效值嗎?或者一個與所用模型無關的下拉列表中的值?還是我太偏執? – user1079925

+0

@ user1079925如果有人試圖爲radio buton設置無效值,或者選擇它意味着他試圖繞過(這些是輸入類型,其中的一組值被定義限制) - 對於那些類型的輸入,服務器端驗證應該就像普通用戶看不到任何UX獲益一樣。 – tpeczek

1

可以容納所有驗證規則xml文件中&緩存它。 然後使用緩存的驗證規則驗證後端&前端。