0

わかりましたので、 と関連するビューMVC projectを自動生成する がAccountController AcountModelあります。
モデル ファースト アプローチを使用して 3 つのテーブルを持つデータベースを作成し、controllers/viewsすべてのCRUD操作に対してすべてを生成しました。

idデータベースには、ユーザー、emailおよびを含むユーザー テーブルが含まれていますpassword

AccountControllerユーザーのログインと登録用に自動生成されたこのユーザー テーブルを使用するにはどうすればよいですか?

4

2 に答える 2

1

カスタムデータベースを使用してログイン/登録を構築できるものを参照しながら、登録プロセスのみを示します。

モデル:カスタムモデル をに追加するので、AccountModels.cs次の詳細があります。

 public class ChangePasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Current password")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "New password")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm new password")]
        [System.Web.Mvc.Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class LogOnModel
    {

        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [System.Web.Mvc.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }


    public class userDetailModel
    {
        [Key]
        public Guid UserId { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
        public string city { get; set; }
        public string ConfirmPassword { get; set; }
        public string comapny { get; set; }
        public int zip { get; set; }
    }

コンテキスト:Models以下 のようにカスタムコンテキストを追加します。

public class userDetailsDBContext: DbContext
    {
        public DbSet<userDetailModel> details { get; set; }

    }

コントローラー:AccountController次に、登録用に以下のよう に変更します。

public class AccountController : Controller
    {
        private userDetailsDBContext db = new userDetailsDBContext();
        // POST: /Account/Register

        [HttpPost]
        public ActionResult Register(userDetailModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                    var newuser = Membership.GetUser(model.UserName);
                    model.UserId =(Guid)newuser.ProviderUserKey;
                    db.details.Add(model);
                    db.SaveChanges();
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);

        } 
}

web.configの編集: 最後に、次のように接続文字列に新しいコンテキストを追加する必要があります。

<connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MembershipSample-20121105163515;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MembershipSample-20121105163515.mdf" />
    <add name="userDetailsDBContext" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MembershipSample-20121105163515;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MembershipSample-20121105163515.mdf" />
  </connectionStrings>

データベース名を好きなように変更して、都合の良いときに置くことができますが、ここにパスを正しく入れてください。

あなたが今アイデアを持っていることを願っています...

于 2012-12-13T16:02:50.530 に答える
0

必要なのは、カスタムメンバーシッププロバイダーを作成することだと思います。このコードプロジェクトの記事はあなたに始める場所を与えるでしょう。

于 2012-12-13T16:05:19.187 に答える