【发布时间】:2015-06-10 17:10:41
【问题描述】:
我正在尝试使用 TryUpdateModel 在 MVC 控制器的数据库中保存几个字段。但是,它一直返回 false,因为它正在验证电子邮件地址和电话号码的格式无效。有字段是空白或空的。在 TryUpdateModel 方法中,我指定了包含哪些字段,而这些字段不是其中之一。我不确定为什么它在包含的属性之外进行验证?
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." });
}
success 总是错误的,因为它正在验证我指定的其他字段。任何人都知道如何解决此问题或为什么要验证其他字段?
【问题讨论】:
-
includeProperties表示它只会设置列表中属性的值。您可能在另一个属性上具有(比如说)[Required]属性这一事实仍然意味着该模型将无效。您应该使用仅包含所需属性的视图模型,然后在 POST 方法中,获取数据模型,然后在保存数据模型之前将视图模型属性映射到数据模型。 -
这是一种确认链接,用户可以点击它来确认用户收到了一封电子邮件。有没有更安全的方法来做到这一点? @StephenMuecke
-
您需要为
MyModelobject显示您的模型(包括验证属性)(目前尚不清楚是什么属性导致ModelState无效) -
电话和电子邮件字段无效,因为它正在验证一个空字符串。有没有比我上面尝试的更好的方法?我认为有一个 ModelState.Remove() 可以取出违规字段?这还推荐吗? @StephenMuecke
-
这不会有帮助,因为你只在
TryUpdateModel()之后调用它来删除ModelState错误(到那时success的值已经是false)。但是为什么只将这些属性包含在includeProperties列表中呢?
标签: asp.net-mvc linq entity-framework