2

Visual Studio 2012 Express で新しい ASP.net MVC 4 アプリケーションを作成し、インターネット アプリケーション テンプレートを選択すると、ユーザーを管理するためのアカウント モデルが作成されます。

これにより、ユーザーは独自のユーザー名とパスワードで登録およびログインできます。

ユーザー名を別のもの (メール アドレスなど) に変更することもできます。

ただし、ユーザーに一意のユーザー名と電子メールを入力するよう要求することは非常に一般的です。

すぐに使用できる機能を変更して、これを確認するにはどうすればよいですか? サーバー側に加えて、クライアント側のチェックが推奨されます。

Code First を使用しているため、データベースと SQL Server 2012 Express を手動で変更したくありません。

ありがとう。

4

2 に答える 2

3

Usernameすぐに使用できるテンプレートを使用している場合は、心配する必要はありませんWebSecurity。に関してはEmail、これは私が現在取り組んでいる Web アプリケーションで行ったことです。

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            using (EfDb db = new EfDb())
            {
                UserProfile userEmail = db.UserProfiles.FirstOrDefault(u => u.Email.ToLower() == model.Email.ToLower());
                try
                {
                    // Check if email already exists
                    if (userEmail == null)
                    {
                        var token = WebSecurity.CreateUserAndAccount(
                            model.UserName,
                            model.Password,
                                new
                                    {
                                        model.Email                                           
                                    },
                            true);
                        }
                    ModelState.AddModelError("", ErrorCodeToString(MembershipCreateStatus.DuplicateEmail));
                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }
            }
        }
        // If we got this far, something failed, redisplay form
        return View(model);
    }

ご覧のとおり、Database はここでの検証とは何の関係もありません。C# コードが処理します。ViewModel にこれがあることを確認してください。

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

ビューで

    <div class="editor-label">
        @Html.LabelFor(model => model.UserName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.UserName)
        @Html.ValidationMessageFor(model => model.UserName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Email)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Email)
        @Html.ValidationMessageFor(model => model.Email)
    </div>
于 2013-04-08T05:03:06.760 に答える