具有相关实体的ASP.NET MVC 4错误更新实体框架模型

保罗

我觉得这应该是一件很普通的事情。我有一个带有相关对象的模型。假设它是一个用户,而一个用户只有一个角色。

public class User
{
  public int Id { get; set; }
  public virtual Role Role { get; set; }
  /* other stuff that saves fine */
}

public class Role
{
  public int Id {get;set;}
  public string Name { get;set;}
}

因此,如果我保存一个新用户,或编辑一个用户(但不更改其角色),则没有任何问题。如果我有一个没有角色的用户,并且向他添加了角色,同样没有问题(尽管我手动查找了该角色并进行了分配)。如果尝试更改角色,则会在Role属性上收到模型状态错误,该ID是对象键的一部分,并且无法更改。那么人们如何进行这样的更新?将简单值列入白名单,然后手动更新角色?

我有问题的控制器代码在这里:

[HttpPost]
public ActionResult Save(int id, FormCollection form)
{
   var user = data.Users.FirstOrDefault(d=> d.Id == id);

   if (user != null)
   {
      TryUpdateModel(user, form.ToValueProvider());
      if (!ModelState.IsValid)
      {
         var messages = ModelState.Values.Where(m => m.Errors.Count() > 0).SelectMany(m=>m.Errors).Select(e => e.ErrorMessage);
         if (Request.IsAjaxRequest())
              return Json(new { message = "Error!", errors = messages });
         return RedirectToAction("index"); // TODO: more robust Flash messaging
      }

      updateDependencies(user);
     /* negotiate response */
   }
}

我现在可能只是手动进行操作,但似乎至少在某种程度上我应该可以开箱即用。

马西恩

您的User模型应具有外键:

public int? RoleId { get; set; }
public virtual Role Role { get; set; }

您可以为该Role.Id分配一个,或者null在用户没有角色时将赋值

我也不确定您的Save功能是否正确。我一直在使用这种模式(不知道它是否正确...),但是当然这取决于您发布到服务器的数据:

[HttpPost]    
public ActionResult Save(User model)
{
  if (ModelState.IsValid)
  {
    // Save logic here, for updating an existing entry it is something like:
    context.Entry(model).State = EntityState.Modified;
    context.SaveChanges();
    return View("Success");
  }
  return View("Edit", model);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有模型和实体框架的ASP.NET MVC

来自分类Dev

使用实体框架更新ASP.NET MVC应用程序中的相关实体

来自分类Dev

实体框架和ASP.NET MVC更复杂的模型

来自分类Dev

具有实体框架的简单存储库ASP.NET MVC

来自分类Dev

具有ViewModel和实体框架的ASP.NET MVC父子级

来自分类Dev

具有在SingleView中创建的实体列表的Asp.Net Core MVC EF模型

来自分类Dev

带有实体框架的ASP .NET MVC 5中的并发

来自分类Dev

具有实体框架5和MVC4的Log4net

来自分类Dev

主键MVC实体框架模型错误

来自分类Dev

ASP.NET MVC 4数据库实体错误

来自分类Dev

实体框架ASP Net MVC错误,当日期字段为空时,它将覆盖编辑操作期间的现有日期

来自分类Dev

实体框架探查器-带有EF 6的ASP.NET MVC4-无法确定提供程序名称

来自分类Dev

实体框架探查器-带有EF 6的ASP.NET MVC4-无法确定提供程序名称

来自分类Dev

ASP.NET MVC单元测试项目实体框架错误

来自分类Dev

ASP.NET MVC单元测试项目实体框架错误

来自分类Dev

生成错误Asp.Net MVC 3实体框架自动生成的文件

来自分类Dev

在ASP.NET MVC项目中使用实体框架代码优先时登录失败错误

来自分类Dev

ASP.NET vNext MVC和实体框架问题

来自分类Dev

ASP.NET MVC 5实体框架-关系

来自分类Dev

使用实体框架ASP.NET MVC登录过程

来自分类Dev

实体框架(ASP.NET MVC)的导航属性问题

来自分类Dev

ASP.NET MVC处理时区实体框架

来自分类Dev

ASP.NET MVC 5实体框架-关系

来自分类Dev

结合使用ASP.NET MVC和实体框架

来自分类Dev

ASP.NET MVC LINQ实体框架递归

来自分类Dev

实体框架中的 System.NotSupportedException (ASP.NET MVC)

来自分类Dev

ASP.NET MVC 实体框架 ID 不能为空

来自分类Dev

ASP.NET MVC 实体框架查询搜索

来自分类Dev

在联结表asp.net MVC中插入记录4实体框架6

Related 相关文章

  1. 1

    没有模型和实体框架的ASP.NET MVC

  2. 2

    使用实体框架更新ASP.NET MVC应用程序中的相关实体

  3. 3

    实体框架和ASP.NET MVC更复杂的模型

  4. 4

    具有实体框架的简单存储库ASP.NET MVC

  5. 5

    具有ViewModel和实体框架的ASP.NET MVC父子级

  6. 6

    具有在SingleView中创建的实体列表的Asp.Net Core MVC EF模型

  7. 7

    带有实体框架的ASP .NET MVC 5中的并发

  8. 8

    具有实体框架5和MVC4的Log4net

  9. 9

    主键MVC实体框架模型错误

  10. 10

    ASP.NET MVC 4数据库实体错误

  11. 11

    实体框架ASP Net MVC错误,当日期字段为空时,它将覆盖编辑操作期间的现有日期

  12. 12

    实体框架探查器-带有EF 6的ASP.NET MVC4-无法确定提供程序名称

  13. 13

    实体框架探查器-带有EF 6的ASP.NET MVC4-无法确定提供程序名称

  14. 14

    ASP.NET MVC单元测试项目实体框架错误

  15. 15

    ASP.NET MVC单元测试项目实体框架错误

  16. 16

    生成错误Asp.Net MVC 3实体框架自动生成的文件

  17. 17

    在ASP.NET MVC项目中使用实体框架代码优先时登录失败错误

  18. 18

    ASP.NET vNext MVC和实体框架问题

  19. 19

    ASP.NET MVC 5实体框架-关系

  20. 20

    使用实体框架ASP.NET MVC登录过程

  21. 21

    实体框架(ASP.NET MVC)的导航属性问题

  22. 22

    ASP.NET MVC处理时区实体框架

  23. 23

    ASP.NET MVC 5实体框架-关系

  24. 24

    结合使用ASP.NET MVC和实体框架

  25. 25

    ASP.NET MVC LINQ实体框架递归

  26. 26

    实体框架中的 System.NotSupportedException (ASP.NET MVC)

  27. 27

    ASP.NET MVC 实体框架 ID 不能为空

  28. 28

    ASP.NET MVC 实体框架查询搜索

  29. 29

    在联结表asp.net MVC中插入记录4实体框架6

热门标签

归档