如何在控制器MVC中添加必需的模型属性?

弗拉迪斯拉夫·库尔科托夫(Vladislav Kurkotov)

我有一个模型,CompanyInfoModel它有这样的领域:

[Display(Name = "CompanyName", ResourceType = typeof(i18n))]
[StringLength(64, ErrorMessageResourceType = typeof(i18n), ErrorMessageResourceName = "InvalidCompanyLength")]
public string CompanyName { get; set; }

在控制器中,在一定条件下的get方法中,我必须使属性成为CompanyName必需属性(此属性并非总是必需的)。由于的自定义实现,因此无法添加所需的属性@Html.EditorFor

如何required在控制器的属性中添加属性?

詹姆斯·辛普森

对于条件验证,您可以在此处选择几个选项

1)创建一个自定义的必填属性,并实现打开/关闭必填字段所需的逻辑

public class CustomRequiredAttribute : RequiredAttribute
{
    public override IsValid(object val, ValidationContext context)
    {
        if(SomeConditionisValid())
             return base.IsValid(val, context);
        else
             return true; // the field is valid (e.g not required)
    }
}

如果可以从模型中导出规则,则可以使用它来推动验证。该模型可从ValidationContext.ObjectInstance获得。

2)除了上述之外,您还可以实现IValidatableObject,该对象提供了可以在模型绑定期间执行验证规则的方法。同样,如果您可以完全从已验证的对象派生验证规则。

在模型上,实现IValidatableObject

IEnumerable<ValidationResult> Validate(
    ValidationContext validationContext
     if(SomethingIsInvalid())
         yield return new ValidationResult("Something is invalid") { }
)

3)如果您需要模型外部的上下文来执行验证,请在自定义模型绑定程序中进行验证,例如从DefaultModelBinder继承并重写

protected virtual bool OnPropertyValidating(
    ControllerContext controllerContext,
    ModelBindingContext bindingContext,
    PropertyDescriptor propertyDescriptor,
    Object value
)
{
    if(SomethingIsInvalid())
    {
         bindingContext.ModelState.AddModelError("Field", "Is Required");
    }

    base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor)
} 

然后注册该类型的模型资料夹

[ModelBinder(typeof(CompanyInfoModelBinder))]
public class CompanyInfoModel
{

}   

4)在控制器中进行操作(不推荐!)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET MVC中的控制器中调用模型方法

来自分类Dev

如何在MVC中添加布尔必需属性?

来自分类Dev

Laravel 5.2:如何在控制器中获取模型属性

来自分类Dev

Laravel 5.2:如何在控制器中获取模型属性

来自分类Dev

如何在<script>标签中获取Spring MVC控制器模型键值

来自分类Dev

如何在MVC 4中从控制器访问私有构造函数到模型类

来自分类Dev

如何在ShoppingCart控制器/模型中模拟HttpContext

来自分类Dev

如何在控制器类中调用模型类

来自分类Dev

如何在控制器laravel 5.2中获取模型

来自分类Dev

如何在Sails中访问控制器外部的模型

来自分类Dev

如何在控制器的模型中获取变量?

来自分类Dev

如何在控制器中检查模型数据打印?

来自分类Dev

如何在控制器中包括不是模型的类

来自分类Dev

如何在Sails中访问控制器外部的模型

来自分类Dev

如何在 Ember 控制器中访问模型数据

来自分类Dev

模型或控制器中的MVC变量?

来自分类Dev

如何在Visual Studio 2013中向WebApi项目添加MVC帐户控制器?

来自分类Dev

如何在MVC 5 Visual Studio 2013 Ultimate中添加控制器?

来自分类Dev

如何在api MVC Project Net Core 3.1中向控制器添加动作

来自分类Dev

如何在MVC 5 Visual Studio 2013 Ultimate中添加控制器?

来自分类Dev

如何在Visual Studio 2013中向WebApi项目添加MVC帐户控制器?

来自分类Dev

如何在ASP.NET MVC 6中添加基本控制器

来自分类Dev

如何在控制器B中设置控制器A中属性的值?

来自分类Dev

如何从umbraco mvc中的表面控制器添加查询字符串以持久保存模型值

来自分类Dev

如何在控制器中访问表单验证属性

来自分类Dev

如何在MVC中测试控制器类?

来自分类Dev

如何在jsp中调用Spring MVC控制器

来自分类Dev

如何在Spring MVC中映射多个控制器

来自分类Dev

如何在Spring MVC中创建主控制器

Related 相关文章

  1. 1

    如何在ASP.NET MVC中的控制器中调用模型方法

  2. 2

    如何在MVC中添加布尔必需属性?

  3. 3

    Laravel 5.2:如何在控制器中获取模型属性

  4. 4

    Laravel 5.2:如何在控制器中获取模型属性

  5. 5

    如何在<script>标签中获取Spring MVC控制器模型键值

  6. 6

    如何在MVC 4中从控制器访问私有构造函数到模型类

  7. 7

    如何在ShoppingCart控制器/模型中模拟HttpContext

  8. 8

    如何在控制器类中调用模型类

  9. 9

    如何在控制器laravel 5.2中获取模型

  10. 10

    如何在Sails中访问控制器外部的模型

  11. 11

    如何在控制器的模型中获取变量?

  12. 12

    如何在控制器中检查模型数据打印?

  13. 13

    如何在控制器中包括不是模型的类

  14. 14

    如何在Sails中访问控制器外部的模型

  15. 15

    如何在 Ember 控制器中访问模型数据

  16. 16

    模型或控制器中的MVC变量?

  17. 17

    如何在Visual Studio 2013中向WebApi项目添加MVC帐户控制器?

  18. 18

    如何在MVC 5 Visual Studio 2013 Ultimate中添加控制器?

  19. 19

    如何在api MVC Project Net Core 3.1中向控制器添加动作

  20. 20

    如何在MVC 5 Visual Studio 2013 Ultimate中添加控制器?

  21. 21

    如何在Visual Studio 2013中向WebApi项目添加MVC帐户控制器?

  22. 22

    如何在ASP.NET MVC 6中添加基本控制器

  23. 23

    如何在控制器B中设置控制器A中属性的值?

  24. 24

    如何从umbraco mvc中的表面控制器添加查询字符串以持久保存模型值

  25. 25

    如何在控制器中访问表单验证属性

  26. 26

    如何在MVC中测试控制器类?

  27. 27

    如何在jsp中调用Spring MVC控制器

  28. 28

    如何在Spring MVC中映射多个控制器

  29. 29

    如何在Spring MVC中创建主控制器

热门标签

归档