如果你在Visual Studio2012学习版中创建一个新的ASP.net MVC4应用程序-并选择互联网应用程序模板-它会为你创建一个帐户模型来管理用户。
开箱即用,这允许用户使用唯一的用户名和密码进行注册和登录。
您还可以将用户名更改为其他名称,例如电子邮件地址。
但是,要求用户输入唯一的用户名和电子邮件是很常见的。
如何更改开箱即用的功能以检查此问题?除了服务器端之外,客户端检查更可取。
我使用的是Code First -所以不想手动更改数据库& SQL Server 2012 Express。
谢谢。
发布于 2013-04-08 13:03:07
如果你使用的是开箱即用的模板,你不必担心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);
}如您所见,数据库与这里的验证无关。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-08 10:23:19
我不认为有办法“自动”做到这一点。在您的帐户控制器中,在插入新用户名(创建新帐户)之前,您必须检查提交的新用户名是否已存在于数据库中,并向视图发送相应的错误消息,以防在数据库中找到用户名。
使用一些JavaScript/jQuery,您可以实现“客户端”检查,它实际上会在后台向服务器提交新的用户名(ajax请求),用于检查和显示错误,或者根据结果继续提交表单的其余部分。
https://stackoverflow.com/questions/15870211
复制相似问题