ASP.NET核心实体模型自动映射到模型

时间:2016-08-16 16:25:28

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

我正在使用ASP.NET Core RTM(完整的.NET Framework)。

我遇到了一个控制器的意外行为,该控制器接受实体模型作为参数并返回视图模型。在控制器中,我创建了一个视图模型的新实例,并使用实体模型来填充它。

[HttpGet]
public IActionResult Create(ActiveDirectoryUser model)
{
    ApplicationUserView user;

    user = new ApplicationUserView
    {
        UserName = model.UserName,
        Email = model.Email.ToLower(),
        FirstName = model.FirstName,
        LastName = model.LastName,
        Active = true
    };

    return View(user);
}

使用上面的代码,我注意到即使在调试中,ApplicationUserView对象显示电子邮件是小写的,电子邮件地址也不会在视图中更改为小写。

所以我做了一个测试,我在那里使用了ApplicationUserView对象的静态值。

user = new ApplicationUserView
{
    UserName = "Test",
    Email = "test@test.com",
    FirstName = "Test",
    LastName = "Test",
    Active = true
};

使用上面的代码,视图仍然显示ActiveDirectoryUser模型传递的值。

我不明白ActiveDirectoryUser模型中的值是如何进入视图的,以及为什么我无法覆盖它们。我试图在构造函数中覆盖它们,如上所示,并尝试像user.Email = "test@test.com"一样单独设置它们。

如何在没有ActiveDirectoryUser模型的任何数据的情况下将我的ApplicationUserView模型传递给视图?

1 个答案:

答案 0 :(得分:3)

在发回模型之前尝试[。页面模型存储在ModelState中,该模型优先于当前模型。 此外,我假设ModelState.Clear();是您的视图绑定的模型..