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>