【问题标题】:ASP.NET Core Entity Model Automatically Maps to View ModelASP.NET Core 实体模型自动映射到视图模型
【发布时间】:2016-12-23 03:03:44
【问题描述】:

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

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

[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 模型传递给视图?

【问题讨论】:

  • 您当前的代码(问题顶部的代码)正在将您的 ActiveDirectoryUser 对象的属性值设置为您的视图模型。如果您不希望这样,请不要设置这些值。您面临的具体问题是什么?您不想要任何值或者您想要小写的电子邮件值?对不起 !我对您的预期行为感到困惑
  • 如前所述,最初的问题是电子邮件地址未更改为小写。我不知道为什么,所以我做了我提到的测试,出乎意料地发现无论我做什么,ActiveDirectoryUser 模型中的值都会进入视图。

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


【解决方案1】:

在将模型寄回之前尝试ModelState.Clear();。页面模型存储在 ModelState 中,它优先于您当前的模型。 我还假设ApplicationUserView 是您的视图绑定到的模型..

【讨论】:

  • 这解决了我的问题。是的,我的观点与ApplicationUserView 模型有关。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多