2010-05-04 45 views
8

使用MVC2,我有一個簡單的ViewModel,它包含一個在視圖上呈現爲複選框的布爾字段。我想驗證用戶是否選中了該框。我的ViewModel上的[必需]屬性似乎沒有辦法。我相信這是因爲未經檢查的複選框表單字段在POST期間並未實際傳回,因此驗證不會在其上運行。你將如何驗證ASP.Net MVC 2中的複選框?

有沒有一種標準的方式來處理MVC2中的複選框「必需」驗證?還是我必須爲它編寫一個自定義驗證器?由於上述原因,我懷疑自定義驗證器不會被執行。我堅持在我的控制器中明確檢查它嗎?這似乎凌亂...

任何指導將不勝感激。

斯科特

編輯CLARITY:如下面的評論中指出,這是一個「同意我們的條款」複選框類型,因此「未選中」是一個有效的答案,所以我真的很爲「被檢查」驗證。

+1

這是一個「我接受許可協議的條款」類型的複選框嗎? [Required]屬性不起作用,因爲未選中的複選框是有效值(false)。 – 2010-05-04 16:21:32

+0

是的,就是這樣,如果他們沒有檢查它,我們只是重新顯示相同的視圖,並帶有驗證信息,您必須接受這些條款才能繼續。不過,我明白你對虛假「有效」的觀點。 – 2010-05-05 00:18:15

+0

這裏的答案有一個很好的方式來處理客戶端驗證器:[http://stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate](http:// stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate) – 2012-08-14 15:30:01

回答

13

自定義驗證程序是要走的路。我會後我的代碼,我用來驗證用戶接受的條款......

public class BooleanRequiredToBeTrueAttribute : RequiredAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     return value != null && (bool)value; 
    } 
} 
+0

這是否驗證客戶端? – jrummell 2011-02-22 20:22:21

+0

不是我自己知道的。爲了創建客戶端驗證,您必須爲自定義驗證創建一個驗證器。 看到如何實現這個下面的鏈接瞭解詳細信息:http://www.highoncoding.com/Articles/729_Creating_Custom_Client_Side_Validation_in_ASP_NET_MVC_2_0.aspx 你必須創建自定義的驗證 – SQueek 2011-02-23 10:25:50

0

我也正在尋找一種方式,有模型綁定正確處理複選框布爾值。與此同時,我在動作中使用這個:

Object.Property = !String.IsNullOrEmpty(Request.Form["NAME"]); 

也許這對您有些用處。

12

我通常使用:

[RegularExpression("true")] 
+2

我喜歡這一個DataAnnotationsModelValidator,雖然我不得不調整它是這樣的:'[RegularExpression(「true | True」)]'讓它爲我工作。 (我正在使用MVC3,如果這有所作爲?) – Merenzo 2011-11-21 05:11:21

+0

它是否也爲您提供客戶端驗證?正確地獲得了服務器端 – Shekhar 2011-11-29 10:19:27

6

如果你不想創建自己的自定義驗證,並仍然希望使用現有屬性的模型,你可以使用:

[Range(typeof(bool), "true", "true", ErrorMessage="You must accept the terms and conditions.")] 

這保證該布爾值的範圍介於true和true之間。但是,雖然此方法可行,但我仍然希望在此方案中使用自定義驗證器。我只是覺得我會提到這是另一種選擇。