2016-08-16 119 views
0

我正在使用ASP.NET Core RTM(完全.NET Framework)。ASP.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 = "[email protected]", 
    FirstName = "Test", 
    LastName = "Test", 
    Active = true 
}; 

上面的代碼仍然顯示由ActiveDirectoryUser模型傳入的值。

我不明白來自ActiveDirectoryUser模型的值是如何使它到視圖,爲什麼我不能重寫它們。我試圖在構造函數中覆蓋它們,如上所示,並嘗試單獨設置它們,如user.Email = "[email protected]"

如何將我的ApplicationUserView模型傳遞給沒有來自ActiveDirectoryUser模型的任何數據的視圖?

+0

您當前的代碼(問題頂部的代碼)將您的'ActiveDirectoryUser'對象的屬性值設置爲您的視圖模型。如果你不想這樣做,不要設置值。你面臨的問題究竟是什麼?你不想要任何值,或者你想要小寫的電子郵件值?對不起!我對你的預期行爲感到困惑 – Shyju

+0

如前所述,最初的問題是電子郵件地址未被改爲小寫。我無法弄清楚爲什麼所以我做了我提到的測試,並且意外地發現無論我做了什麼,來自'ActiveDirectoryUser'模型的值都進入了視圖。 –

回答

3

嘗試ModelState.Clear();然後再發送模型。頁面模型存儲在優先於當前模型的ModelState中。 另外我假設ApplicationUserView是您的視圖必須遵循的模型。

+0

這解決了我的問題。是的,我的觀點被綁定到ApplicationUserView模型上。謝謝! –