2013-10-15 69 views
1

基本上我想寫我的驗證邏輯一次,並在服務器和客戶端使用它。Webforms C#客戶端驗證使用WebAPI的CustomValidator

好像http://www.asp.net/web-forms/tutorials/hands-on-labs/whats-new-in-web-forms-in-aspnet-45將適合該法案,但似乎沒有成爲一個純文本輸入,以便支持.....

我使用C#和編寫web表單4.5應用程序通過實體框架的支持5.我所看到的是如何提供驗證客戶端和服務器端,而不需要重複驗證邏輯。

說我有一個文本輸入,我想驗證的最小長度,存在,最大長度。我可以在窗體上放置一個自定義驗證器並編寫一些JavaScript代碼,但是我必須在後端編寫類似的代碼。

似乎更好的方法是將驗證邏輯封裝在後端,然後通過來自JS的HTTP GET調用該邏輯。這樣,如果我需要更改驗證邏輯,我會在後面的代碼中更新它,並且JS客戶端將保持不變,因爲它僅僅調用相同的GET。

我已經看到了與MVC/Web One/Web API有關的各種示例,但無法看到我可以如何將其應用於我所提議的內容。

有沒有人有任何建議?這是否做過?如果我不需要,我不想重新實現輪子。

+0

我結束了使用以下https://davalidation.codeplex.com。 – TheEdge

回答

0

ASP.NET爲您做到這一點! 您可以使用標註在你的模型類,如:

[Required, StringLength(100), Display(Name = "Name")] 
public string ProductName { get; set; } 

請參見本教程:http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/create_the_data_access_layer

有很多,你可以使用標註的,他們會爲客戶端驗證工作了。所以你只需要「寫」邏輯一次。

如果標準註釋不夠,您可以聲明自己的註釋。但是,你還必須編寫一個客戶端驗證。這確實是有問題的。進行GET-Calls服務器驗證當然是可能的,但這不會是一個「真正的」客戶端驗證。在這些情況下,保持邏輯兩次可能是最實際的解決方案。

+0

StringLength()如何在驗證方面傳播到客戶端?即。這是如何導致Javascript到達客戶端的?本教程沒有提及任何有關客戶端驗證的內容。 – TheEdge

+0

「默認情況下,驗證器控件將客戶端ECMAScript(JavaScript)注入頁面以在瀏覽器中執行驗證檢查。」 From:[link](http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/aspnet-error-handling) – jHilscher