问题描述
我正在尝试在模型具有外键字段的地方进行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; }
}
解决方法
您可以分配UserId(或任何其他属性),它将有效并保存到DB,但不会影响您的ModelState。 ModelState将与从客户端发布的相同。有两种解决方法:
- 在使用模型返回View并将其作为隐藏字段保留在视图中之前,请先在控件的get操作中为模型分配UserId。
- 检查ModelState的哪些属性无效,如果只有UserId,则对其进行分配并保存。我可以向您展示可以定义Modeld中无效内容的代码