詳細を表示するためにViewModelを機能させるのに苦労しています。新しいレコードを作成するために機能していますが、すでに登録されているデータを表示するだけではどうすればよいかわかりません。
私は2つのモデルを持っています
ユーザー(UserName、Password、emailなどの通常のものが含まれています)そして-
public virtual ICollection<Role> Roles { get; set; }
public virtual UserDetails UserDetails { get; set; }
UserDetailsとは1:1の関係があり、FirstName、LastName、そして
[Required]
public virtual User User { get; set; }
次に、UserとUserDetailsの両方からの必要な登録の詳細を含むRegisterViewModelというViewModelがあります。
私のAccountControllerRegisterメソッドには
MembershipCreateStatus createStatus = MembershipService.CreateUser(viewModel.UserName, viewModel.Password, viewModel.Email);
if (createStatus == MembershipCreateStatus.Success)
{
TRSContext context = new TRSContext();
//FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
User newuser = context.Users
.Include(i => i.UserDetails)
.Where(i => i.UserName == viewModel.UserName)
.Single();
newuser.UserDetails = new UserDetails();
Role adminRole = context.Roles.Find("User");
newuser.Roles = new List<Role>();
newuser.Roles.Add(adminRole);
newuser.UserDetails.Firstname = viewModel.FirstName;
newuser.UserDetails.Lastname = viewModel.LastName;
newuser.UserDetails.Address1 = viewModel.Address1;
newuser.UserDetails.Address2 = viewModel.Address2;
newuser.UserDetails.City = viewModel.City;
newuser.UserDetails.Postcode = viewModel.Postcode;
newuser.UserDetails.Country = viewModel.Country;
context.SaveChanges();
これはすべて正常に機能し、UserテーブルとUserDetailsテーブルの両方に保存されているデータを使用して新しいユーザーを登録できます。
私の問題は、ユーザー/インデックスページに表示するためにデータを再度取得することです。これにより、登録された各ユーザーのユーザーとUserDetailsの両方の詳細が表示されます。私はそれを機能させるために多くの異なることを試みましたが、エラーが発生し続けます。asp.net mvcサイトで本とサンプルアプリを調べましたが、1:1の関係でこのような例を見つけることができません。レジスター部分が機能するようになった後、これは簡単な部分になると思いましたが、これを行う方法がわかりません。
Indexのユーザーコントローラーで、viewModelを渡す必要がありますか?または、Indexメソッド内でviewModelを設定してから、ビューに渡すだけですか?ここでビューモデルを設定しようとしましたが、アカウントコントローラでの設定と似ていると思いましたが、何をしようとしてもエラーが発生します。
編集-私は単に含むUserDetaisDataと呼ばれる新しいViewModelを追加しようとしました-
namespace TRS.ViewModels
{
public class UserDetailsData
{
public IEnumerable<User> User { get; set; }
public IEnumerable<UserDetails> UserDetails { get; set; }
}
}
しかし、これが正しいことかどうかはわかりません。
次に、ユーザーコントローラーのIndexメソッドで-
public ViewResult Index()
{
var viewModel = new UserDetailsData();
ビューに送り返すことができる新しいviewModelをインスタンス化する必要があると思います。
次に、viewModel.User=およびviewModel.UserDetails=を実行するオプションがあります。これは私がすべきことですか?これらの2つのモデルからデータを取得してから、すべてを新しいviewModelのビューに送り返すことはできますか?
誰かがアドバイスをしたり、同様のケースの例を教えてもらえますか?
ありがとう