2011-06-22 70 views
3

我已經創建了下面的自定義屬性來幫助我確認所需的複選框字段:驗證複選框 - 前端MVC3

public class CheckboxRequired : ValidationAttribute, IClientValidatable 
{ 
    public CheckboxRequired() 
     : base("required") { } 

    public override bool IsValid(object value) 
    { 
     return (bool)value == true; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     ModelClientValidationRule rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationType = "mandatory"; 
     yield return rule; 

    } 
} 

不過,我想獲得它觸發客戶端,而不是當我打電話我的ActionResult(if (ModelState.IsValid)

驗證不工作時,我打電話給我的ActionResult,但我更喜歡它越來越遠之前驗證。

我需要做些什麼修改才能在客戶端進行驗證?

感謝

回答

3

爲了實現客戶端,您可以添加例如jQuery的驗證方法和一個不顯眼的適配器(簡單的例子):

// Checkbox Validation 
jQuery.validator.addMethod("checkrequired", function (value, element) 
{  
     var checked = false;  
     checked = $(element).is(':checked');  
     return checked; 
}, ''); 

jQuery.validator.unobtrusive.adapters.addBool("mandatory", "checkrequired"); 

我希望它能幫助。

+0

謝謝。自從我發佈以來,我設法創建了一個非常類似的方法,所以我知道它的工作原理就是我現在想要的! – mp3duck

1

老好Regex怎麼樣?

[RegularExpression("^(true|True)$", ErrorMessage="Required...")] 
public bool AgreeWithTos { get; set; } 

接受「真」和「真」,因爲JavaScript和.NET格式布爾變換的方式不同。

+0

正是我所需要的。謝謝。 – NER1808