2014-03-27 25 views
2

MVC提供了許多驗證屬性,可用作數據註釋來執行簡單的服務器端驗證。但是,如果我想使用自己的業務邏輯進行自定義驗證,則需要創建自定義驗證屬性,該屬性源自ValidationAttribute,並覆蓋IsValid方法。IClientValidatable實現是否違反了MVC中的DRY原則?

到目前爲止這麼好。但是,如果我想在客戶端執行相同的驗證,則需要在驗證屬性類中實現IClientValidatable接口,並實現GetClientValidationRules方法,該方法會告訴我的應用程序必須在此應用程序上執行驗證客戶端也是如此。

然而,有爭議的問題是我需要使用jQuery將此客戶端驗證的邏輯作爲單獨的JavaScript編寫。這與我在覆蓋IsValid方法時已在C#(或VB)中編寫的完全相同。

爲什麼我必須兩次寫同樣的邏輯,儘管使用不同的語言?這是否違反了DRY原則?我希望MVC能夠爲驗證邏輯本身生成JavaScript。

舉例說明什麼我談論:​​

編輯:

而且,如果我的驗證邏輯,需要從應用程序配置文件或應用程序緩存數據?如何在我爲客戶端驗證編寫的jQuery方法中使用它?如果我不能,是否有其他方式來進行客戶端驗證,其邏輯使用應用程序數據?

回答

2

是的,但它往往是值得的。

客戶端驗證的好處是速度快,服務器負載少。服務器驗證的好處是安全性。實現這兩方面都是最好的。

DRY是一個很好的經驗法則,但正如所有的經驗法則都存在違反規則的情況。

編輯回答你的跟進問題

如果您的jQuery從你需要傳遞到客戶端JavaScript的一部分服務器端配置需要的值。例如,您可以在您的視圖中定義一個包含服務器端值的變量。

+0

感謝您的回答。不過我有一個後續問題,我已經添加到問題描述中。 –

+0

@AmateurProgrammer我已經更新了我的答案以回答您的其他問題。 –

+0

再次感謝您的答案。我會試圖做的是,我將在自定義驗證屬性類的「IsValid」方法中編寫驗證邏輯。另外,我將得到我需要的驗證數據作爲JSON,並將其存儲在客戶端,在ViewBag中或視圖上的隱藏字段中,並使用此JSON編寫實現相同驗證邏輯的jQuery方法數據。我希望這可以工作。 –

相關問題