2011-10-17 88 views
0

在我的應用程序中,我想實現條件驗證,我是MVC的新手。 我的代碼看起來像這樣。MVC中的條件驗證

public class ConditionalValidation : IValidatableObject 
    { 
     public bool ValidateName { get; set; } 
     public String Name { get; set; } 

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if (ValidateName) 
      { 
       if (string.IsNullOrEmpty(Name)) 
       { 
        yield return new ValidationResult("*"); 
       } 
      } 
     } 
    } 

但是,當我訪問鑑於這種沒有驗證的工作要麼我檢查複選框或不和頁面提交而不檢查客戶端驗證。 我在控制器上檢查了ModelState.IsVlaid,但也是true,所以請建議我在哪裏工作。

謝謝

+0

嗯,我檢查它是在服務器端工作,但由於我們對模型使用簡單的驗證,mvc框架自動生成客戶端驗證,但在這種情況下不是。所以有什麼辦法可以從模型中生成它,而不是編寫自己的JavaScript驗證? – Abhishek

回答

1

您需要添加所需的數據註釋屬性。

參考這裏: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspx

嘗試......

using System.ComponentModel.DataAnnotations; 

public class ConditionalValidation : IValidatableObject 
    { 
     public bool ValidateName { get; set; } 

     [Required([email protected]"Name is required")] 
     [Display(Name = "Name")] 
     public String Name { get; set; } 

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
     { 
      if (ValidateName) 
      { 
       if (string.IsNullOrEmpty(Name)) 
       { 
        yield return new ValidationResult("*"); 
       } 
      } 
     } 
    } 

UPDATE: 此外,請確保你的web.config已在<的appSettings >如下:

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

而你h AVE包括頁面上的以下內容:
jquery.validate.min.js
jquery.validate.unobtrusive.min.js

這裏有一些教程,我發現:
Unobtrusive Client Validation in ASP.NET MVC 3
Exercise 4: Using Unobtrusive jQuery at Client Side

+0

它很好,但現在在客戶端工作。還有其他的東西,我必須爲客戶端添加? – Abhishek