我在ASP.NET Core项目中创建了一个模型。该模型有一个" Id"属性。当我想在数据库中保存模型时,它表示模型的Id为空。这是代码:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SaveMessage(MessageViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var message = new MessageModel
{
SenderName = await _userManager.GetUserNameAsync(await _userManager.GetUserAsync(User)),
Title = model.Title,
Email = model.Email,
Message = model.Message,
SavedDate = DateTime.Now,
Sent = false
};
var userMessage = new UserMessage
{
ApplicationUser = await _userManager.GetUserAsync(User),
MessageModel = message
};
_context.MessageModel.Add(message);
_context.UserMessage.Add(userMessage);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(HomeController.Home), "Home");
}
return RedirectToAction(nameof(MessageController.EditMessage), "Message", model);
}
以下是模型:
public class MessageModel
{
public string Id { get; set; }
public string SenderName { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public string Message { get; set; }
public DateTime SavedDate { get; set; }
public bool Sent { get; set; }
public List<UserMessage> UserMessages { get; set; }
}
如何为Id提供值? 谢谢!
答案 0 :(得分:0)
没有看到你的模型定义,这是我的猜测:
您的Id很可能是您期望数据库设置的主键。但是,当您定义模型时,可能没有将Id属性指定为键,并且在代码中也没有设置它,这就是它为空的原因。
答案 1 :(得分:0)
如果您要从网页发布模型数据,那么您可能需要该模型属性上的FromBody标记:
public async Task<IActionResult> SaveMessage([FromBody] MessageViewModel model, string returnUrl = null)
.net核心的方式告诉你的行动它应该尝试从请求正文中序列化。它与.Net中的模型绑定有点不同......错误...非核心...我们现在称之为非核心?
无论如何 - check it out。这只是一个猜测 - 但如果你的模型中的其他属性也是null / defaults,那么那可能是正在发生的事情。