【问题标题】:ASP.NET Core MVC POST method a model with foreign key IdASP.NET Core MVC POST 方法一个具有外键 ID 的模型
【发布时间】:2021-02-20 05:02:02
【问题描述】:

我正在尝试执行POST,其中模型具有外键字段,但我想将此值设置为创建者的 ID。我有一个名为“Store”的模型,带有 ApplicationUserId FK 。我尝试将包含ApplicationUserId 的新对象“Store”传递给GET 视图,但是当我提交时,ApplicationUserId 字段为空。我也尝试在控制器上手动设置字段,但此时模型状态已经无效

我的行动:

    public async Task<IActionResult> Create(Store store)
        {
            store.ApplicationUser = currentUser
            if (ModelState.IsValid)
            { 
                _context.Add(store);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(store);
        }

我的模特:

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

        [Required]
        [ForeignKey("ApplicationUserId")]
        public virtual ApplicationUser ApplicationUser { get; set; }
    }

【问题讨论】:

  • 您的操作 Create(Store store) 是为了什么?您是要在屏幕上显示视图还是在数据库中保存存储。在您被某人否决之前,请向我们展示更多代码。
  • 如果值到达 null,那几乎总是一个序列化问题。你的模型商店怎么样,你可以用它来编辑你的帖子吗?以及如何获得“当前用户”?
  • @Sergey,这是为了保存在数据库中,我编辑了帖子。
  • @RodRamírez,我使用“UserManager”类获取当前用户。只有 ApplicationUserId 为空。我用我的模型编辑了帖子。
  • 抱歉,我在您的 Store 类中没有看到 UserId 属性

标签: c# asp.net-mvc asp.net-core .net-core


【解决方案1】:

您可以分配 UserId(或任何其他属性),它会起作用并将保存到 DB,但不会影响您的 ModelState。 ModelState 将与从客户端发布的相同。有两种方法可以解决它:

  1. 在您使用模型返回视图并将视图作为隐藏字段保留在您的视图中之前,在控制器的 get 操作中分配模型中的 UserId。
  2. 检查 ModelState 的哪些属性无效,如果只有 UserId,分配并保存。我可以向您展示可以定义 Modeld 中无效内容的代码

【讨论】:

  • 谢谢,谢尔盖!我虽然在分配用户 ID 后我的模型将变为有效。另一个问题是我没有将该属性添加为隐藏字段。现在我添加了该字段,如果用户没有在前端更改它,我会检查我的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2015-08-15
  • 2021-09-10
  • 1970-01-01
  • 2021-10-12
相关资源
最近更新 更多