Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc TryUpdateModel验证字段不在includeProperties中_Asp.net Mvc_Linq_Entity Framework - Fatal编程技术网

Asp.net mvc TryUpdateModel验证字段不在includeProperties中

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 =>

我试图用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." });
       }

成功总是错误的,因为它正在验证除我指定的字段之外的其他字段。有人知道如何解决这个问题,或者为什么要验证其他字段吗?

除了对MVC和实体框架的功能缺乏全面了解之外,我想我已经知道了我的场景中出现了什么问题。正在验证的字段具有空字符串。尽管如此,字符串还是空的;它仍然得到验证。为了不让模型验证这些字符串是否为有效的电话和/或电子邮件地址,字符串必须为NULL。在调用TryUpdateModel之前,我检查了String.Empty字段,然后将其设置为NULL。问题的一部分是模型从中提取的表被sql存储过程填充。因此,数据在编写时超出了MVC的范围


对我来说,这里的第101课是模型在空字符串上进行验证。

includeProperties意味着它将只设置列表中属性的值。事实上,您可能在另一个属性上有say[Required]属性,这仍然意味着该模型将无效。您应该使用仅包含所需属性的视图模型,然后在POST方法中,获取数据模型,然后在保存数据模型之前将视图模型属性映射到数据模型。这是一种确认链接,用户将单击该链接确认用户收到电子邮件。有没有更安全的方法@StephenMueckeYou需要显示您的模型,包括MyModelobject的验证属性目前尚不清楚是什么属性导致ModelState无效电话和电子邮件字段无效,因为它正在验证空字符串。有没有比我在上面试过的更好的方法?我认为有一个ModelState.Remove可以去掉有问题的字段吗?这是推荐的吗@StephenMuecket这不会有帮助,因为只有在TryUpdateModel之后调用它,以删除ModelState错误,此时success的值已经为false。但为什么只将这些属性包括在includeProperties列表中?