Asp.net mvc TryUpdateModel验证字段不在includeProperties中
我试图用TryUpdateModel在MVC控制器的数据库中保存几个字段。但是,它不断返回false,因为它正在验证电子邮件地址和电话号码是否显示无效格式。这些字段为空或空白。在TryUpdateModel方法中,我指定了包含哪些字段,而这些字段不是其中之一。我不知道为什么要在包含的属性之外进行验证Asp.net mvc TryUpdateModel验证字段不在includeProperties中,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,我试图用TryUpdateModel在MVC控制器的数据库中保存几个字段。但是,它不断返回false,因为它正在验证电子邮件地址和电话号码是否显示无效格式。这些字段为空或空白。在TryUpdateModel方法中,我指定了包含哪些字段,而这些字段不是其中之一。我不知道为什么要在包含的属性之外进行验证 Guid EmailGuid = new Guid(emailguidparam); MyModelobject MyList= db.MyLists.FirstOrDefault(p =>
Guid EmailGuid = new Guid(emailguidparam);
MyModelobject MyList= db.MyLists.FirstOrDefault(p => p.ReceiptGuid == EmailGuid);
var currentUsername = User.Identity.Name != null
? User.Identity.Name
: "Anonymous";
MyList.Field1= true;
MyList.Field2= currentUsername;
MyList.Field3= DateTime.Now;
success = TryUpdateModel(MyList, includeProperties: new string[] { "field1", "field2", "field3" });
if(success){
db.SaveChanges();
return RedirectToAction("AnotherActionController", new { success = false, message = "Thanks." });
}
成功总是错误的,因为它正在验证除我指定的字段之外的其他字段。有人知道如何解决这个问题,或者为什么要验证其他字段吗?除了对MVC和实体框架的功能缺乏全面了解之外,我想我已经知道了我的场景中出现了什么问题。正在验证的字段具有空字符串。尽管如此,字符串还是空的;它仍然得到验证。为了不让模型验证这些字符串是否为有效的电话和/或电子邮件地址,字符串必须为NULL。在调用TryUpdateModel之前,我检查了String.Empty字段,然后将其设置为NULL。问题的一部分是模型从中提取的表被sql存储过程填充。因此,数据在编写时超出了MVC的范围
对我来说,这里的第101课是模型在空字符串上进行验证。includeProperties意味着它将只设置列表中属性的值。事实上,您可能在另一个属性上有say[Required]属性,这仍然意味着该模型将无效。您应该使用仅包含所需属性的视图模型,然后在POST方法中,获取数据模型,然后在保存数据模型之前将视图模型属性映射到数据模型。这是一种确认链接,用户将单击该链接确认用户收到电子邮件。有没有更安全的方法@StephenMueckeYou需要显示您的模型,包括MyModelobject的验证属性目前尚不清楚是什么属性导致ModelState无效电话和电子邮件字段无效,因为它正在验证空字符串。有没有比我在上面试过的更好的方法?我认为有一个ModelState.Remove可以去掉有问题的字段吗?这是推荐的吗@StephenMuecket这不会有帮助,因为只有在TryUpdateModel之后调用它,以删除ModelState错误,此时success的值已经为false。但为什么只将这些属性包括在includeProperties列表中?