用于编辑的部分视图模型必须包含MetadataType中指定的所有字段

本文关键字:MetadataType 字段 包含 编辑 视图 模型 用于 | 更新日期: 2023-09-27 18:01:35

我试图创建一个用于编辑的视图模型,其中包含一些稍微不同的字段,然后是主模型,但是当试图呈现此视图模型的视图时,它会抛出和异常,因为一些属性缺失,在MetadataType中指定。

代码:

[MetadataType(typeof(IAdministrator))]
    public partial class Administrator : IAdministrator
    {
        public string Name { get { return String.Format("{0} {1}", FirstName, LastName); } }
    }
    [MetadataType(typeof(IAdministrator))]
    public class AdministratorEdit
    {
        public int AdministratorID { get; set; }
        public string EmailAddress { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        [DisplayName("New Password")]
        [DataType(DataType.Password)]
        [StringLength(12, MinimumLength = 8)]
        public string NewPassword { get; set; }
        [DisplayName("Re-New Password")]
        [DataType(DataType.Password)]
        [StringLength(12, MinimumLength = 8)]
        public string ReNewPassword { get; set; }
    }
    public interface IAdministrator
    {
        [Required]
        [DisplayName("Email Address")]
        [DataType(DataType.EmailAddress)]
        [RegularExpression(@"^((['w-]+'.)+['w-]+|([a-zA-Z]{1}|['w-]{2,}))@((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])'.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])'.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])'.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+['w-]+'.)+[a-zA-Z]{2,4})$")]
        [StringLength(320)]
        string EmailAddress { get; set; }
        [Required]
        [DisplayName("Password")]
        [DataType(DataType.Password)]
        [StringLength(12, MinimumLength = 8)]
        string Password { get; set; }
        [Required]
        [DisplayName("First Name")]
        [DataType(DataType.Text)]
        [StringLength(25)]
        string FirstName { get; set; }
        [Required]
        [DisplayName("Last Name")]
        [DataType(DataType.Text)]
        [StringLength(25)]
        string LastName { get; set; }
        [DisplayName("Date Created")]
        [DataType(DataType.Date)]
        DateTime Date { get; set; }
    }

这是我从使用administratedit模型的视图中得到的异常:类型'....Models '的关联元数据类型。"administratedit"包含以下未知属性或字段:密码、日期。请确保这些成员的名称与主类型上的属性名称相匹配。

有人可以建议另一种方法来创建一个视图模型,而不必指定另一个元数据类型或只是一个快速修复此异常?

用于编辑的部分视图模型必须包含MetadataType中指定的所有字段

从IAdministrator接口中可以提取一个基类(接口),基接口将只具有编辑字段(IAdministratorEdit),而IAdministrator将保留所有字段,因为它将继承IAdministratorEdit。

public interface IAdministrator : IAdministratorEdit 

,然后在ViewModel上使用IAdministratorEdit接口。这样,您只需要在元数据中定义一次约束。