2016-08-16 8 views
0

私はASP.NET Core RTM(フル.NET Framework)を使用しています。ASP.NETコアエンティティモデルが自動的にビューモデルにマップされます

エンティティモデルをパラメータとして受け取り、ビューモデルを返すコントローラで予期しない動作が発生しました。コントローラでは、ビューモデルの新しいインスタンスを作成し、エンティティモデルを使用してそれを設定します。 I上記のコードでは

[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]"のように個別に設定しようとしました。

ActiveDirectoryUserモデルのデータを使用せずにApplicationUserViewモデルをビューに渡すにはどうすればよいですか?

+0

現在のコード(質問の先頭にあるもの)は、ビューモデルに 'ActiveDirectoryUser'オブジェクトのプロパティ値を設定しています。必要がない場合は、値を設定しないでください。あなたは直面している問題は何ですか?あなたは値を必要としないか、電子メールの価値を小文字にしたいですか?ごめんなさい !私はあなたの予想される行動について混乱しています – Shyju

+0

上記のように、元の問題は、電子メールアドレスが小文字に変更されていないことでした。なぜ私が言及したテストをしたのか分からず、「ActiveDirectoryUser」モデルの値が、私が何をしてもビューに移動したことが突然見つかった。 –

答えて

3

ModelState.Clear();をお試しください。モデルを送り返す前にお試しください。ページモデルは、現在のモデルよりも優先されるModelStateに格納されます。 また、ApplicationUserViewはビューがバインドされているモデルであると仮定します。

+0

それは私の問題を修正しました。もちろん、私の見解は 'ApplicationUserView'モデルに縛られています。ありがとう! –

関連する問題