如何在 asp.net MVC 中忽略数据注释验证

How to ignore data annotation validation in asp.net MVC

有没有办法在asp.net验证中忽略数据注释验证?

看下面的案例:

我有消息实体的元数据class

public class MessageMetaData
{
    [Required(ErrorMessage="This field is required")]        
    public int[] To { get; set; }

    [Required(ErrorMessage = "This field is required")]        
    public string Title { get; set; }

    [Required(ErrorMessage = "This field is required")]        
    public string Body { get; set; }
}

这是我的留言 class:

public partial class message
{
    public message()
    {
        this.FilesRelatedToTheMessage = new HashSet<file>();
        this.Receivers = new HashSet<MessageReceiversConnector>();
    }

    public int id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public Nullable<int> C_From { get; set; }
    public Nullable<int> AreaId { get; set; }
    public Nullable<int> Project { get; set; }
    public string Status { get; set; }
    public System.DateTime DateOfCreation { get; set; }

    public virtual ICollection<file> FilesRelatedToTheMessage { get; set; }
    public virtual EventsArea EventsArea { get; set; }
    public virtual project ProjectTheMessageRelatedTo { get; set; }
    public virtual ICollection<MessageReceiversConnector> Receivers { get; set; }
    public virtual user Sender { get; set; }
}

[MetadataType(typeof(MessageMetaData))]
public partial class message
{
    public int[] To { get; set; }
    public int[] Areas { get; set; }
    private MessageDTO mdto = new MessageDTO();
    public MessageDTO MDTO { get { return this.mdto; } set { this.mdto = value; } }
}

当我想将消息存储为草稿消息时,其中一个属性可能无法发送。有什么办法可以解决这个问题吗?

编辑:

这是我的 DraftMessage 操作

    public string DraftMessage(message draftMessage, string status)
    {
        if (status == "new")
        {
            draftMessage.Status = "DR";
            draftMessage.DateOfCreation = DateTime.UtcNow;
            draftMessage.C_From = CurrentUser.Id;
            context.messages.Add(draftMessage);
            foreach (int receiverId in draftMessage.To)
            {
                if (context.users.Any(user => user.user_id == receiverId && (user.DepartmentOfTheUser.Company == CurrentUser.Company || user.DepartmentOfTheUser.CompanyOfTheDepartment.CompanyCustomers.Any(cus => cus.customer_of == CurrentUser.Company) || user.DepartmentOfTheUser.CompanyOfTheDepartment.CompanySuppliers.Any(supp => supp.supplier_of == CurrentUser.Company))))
                {
                    context.MessageReceiversConnectors.Add(new MessageReceiversConnector() { MessageId = draftMessage.id, ReceiverId = receiverId, MessageStatus = "DR" });
                }
            }
        }

        context.SaveChanges();

        return "draft";
    }

这里它在 context.SaveChanges() 上抛出消息;由于验证,数据库中的字段都可以为空,但由于元数据 class.

而引发异常

也许值得制作两个 ViewModel。一个用于草稿消息,另一个用于您要发送的消息。