0

詳細を表示するために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のビューに送り返すことはできますか?

誰かがアドバイスをしたり、同様のケースの例を教えてもらえますか?

ありがとう

4

1 に答える 1

0

新しいビューモデルを作成して、表示するすべてのデータを表示し、それをビューに渡すことができます(UsersエンティティとUserDetailsエンティティの両方の関連フィールドを組み合わせます)。または、ユーザーのIDのパラメーターを使用してHTMLパーシャルを渡して、UserDetailsを表示することもできます。

于 2012-10-09T15:57:17.260 に答える