2009-02-13 36 views
1

因此,我使用ASP.NET MVC RC1並使用DefaultModelBinder的驗證來顯示非空整數字段未設置爲值時的驗證錯誤。這是MVC默認完成的。然而,對於string(varchar)字段也是如此,因爲binder從視圖中傳遞了一個空字符串,這對於非空varchar列是完全有效的。如何在ASP.NET MVC驗證中要求非空varchar列不爲空?

實際上,當我將列標記爲非空時,我總是意味着我希望它不是空的。所以我拿出並稱驗證檢查到默認粘結劑是這樣的:

public class DefaultEntityBinder : DefaultModelBinder 
{ 
    protected override bool OnPropertyValidating(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value) 
    { 
     bool valid = base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor, value); 

     ColumnAttribute column = propertyDescriptor.Attributes.OfType<ColumnAttribute>().FirstOrDefault(); 
     if (column != null && 
      propertyDescriptor.PropertyType == typeof(string) && 
      !column.CanBeNull && 
      value.IsNullOrBlankString()) 
     { 
      valid = false; 
      bindingContext.ModelState[propertyDescriptor.Name].Errors.Add("A value is required"); 
     } 
     return valid; 
    } 
} 

我不知道這是否是實現添加必需的字符串字段驗證爲默認的目標的最有效的方法在MVC驗證。

回答

1

我已經查看了默認的模型綁定(特別是TypeHelpers.TypeAllowsNullValue),並且我沒有看到任何更好的東西。您可以在包含字符串的類型上實現IDataErrorInfo,但是您必須在支持的每種類型上執行此操作。所以你在做什麼很好。如果您願意接受第三方代碼,那麼xVal驗證框架值得考慮。然後你可以使用像System.ComponentModel中的屬性來裝飾不可爲空的字符串。

相關問題