ASP.NET Core - 模型的id / key没有获得值

时间:2016-09-23 20:42:13

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

我在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提供值? 谢谢!

2 个答案:

答案 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,那么那可能是正在发生的事情。