【问题标题】:MVC Model Validation Multiple ViewMVC 模型验证多视图
【发布时间】:2016-07-28 11:01:24
【问题描述】:

我有一个包含 6 个字段的模型类(所有字段都需要验证)。我有两个使用这个模型的视图。 我在一个视图中有三个字段(比如说 abc.cshtml)和另一个视图中的所有六个(比如说 xyz.cshtml) 问题是,当我在 abc.cshtml 中提交表单并检查时 控制器中的 ModelState.IsValid 属性,它正在验证所有未显示在视图中的字段,因此该属性似乎为假。 这是我的模型

  public class UserModel
  {
        [Required(ErrorMessage = "Enter UserName")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Enter Password")]
        public string Password { get; set; }

        [Required(ErrorMessage = "Enter Firstname")]
        public string Firstname { get; set; }

        [Required(ErrorMessage = "Enter LastName")]
        public string LastName { get; set; }

        [Required(ErrorMessage = "Enter Contact")]
        public string Contact { get; set; }

        [Required(ErrorMessage = "Enter Address")]
        public string Address { get; set; }
  }

我在一个视图中只有用户名、名字和姓氏,而在另一个视图中则有全部六个。 我该如何解决这个问题?

【问题讨论】:

  • 创建 2 个单独的视图模型(您不应该在用于编辑的视图中使用数据模型)
  • 你读过这个post 吗?我不确定它是否与您在这里尝试实现的目标相同,但我相信它会带来一些相关信息

标签: c# asp.net-mvc-4 razor


【解决方案1】:
public class BaseModel{
       [Required(ErrorMessage = "Enter Firstname")]
        public string Firstname { get; set; }

        [Required(ErrorMessage = "Enter LastName")]
        public string LastName { get; set; }

        [Required(ErrorMessage = "Enter UserName")]
        public string UserName { get; set; }


}

   public class UserModel : BaseModel
  {

        [Required(ErrorMessage = "Enter Password")]
        public string Password { get; set; }

        [Required(ErrorMessage = "Enter Contact")]
        public string Contact { get; set; }

        [Required(ErrorMessage = "Enter Address")]
        public string Address { get; set; }
  }

Hope it will help you to reduce redundancy and work with different view also , i think that is he best way to tackle this kind of problem Thanks

【讨论】:

  • 这个方法不错
【解决方案2】:

如果提交3个属性,在验证模型状态之前,其他属性有明确的错误。

您可以通过执行以下操作来消除模型错误:

if (ModelState.ContainsKey("{key}"))
    ModelState["{key}"].Errors.Clear();

键:属性名称

在您的情况下,有 3 个属性,因此必须使用它(如果条件)三次或直接清除已知属性的错误。

之后使用

ModelState.IsValid

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 2011-06-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多