首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC4、互联网应用模板、SimpleMembership -帐户模型-强制使用唯一用户名和电子邮件

ASP.NET MVC4、互联网应用模板、SimpleMembership -帐户模型-强制使用唯一用户名和电子邮件
EN

Stack Overflow用户
提问于 2013-04-08 10:10:47
回答 2查看 4.7K关注 0票数 2

如果你在Visual Studio2012学习版中创建一个新的ASP.net MVC4应用程序-并选择互联网应用程序模板-它会为你创建一个帐户模型来管理用户。

开箱即用,这允许用户使用唯一的用户名和密码进行注册和登录。

您还可以将用户名更改为其他名称,例如电子邮件地址。

但是,要求用户输入唯一的用户名和电子邮件是很常见的。

如何更改开箱即用的功能以检查此问题?除了服务器端之外,客户端检查更可取。

我使用的是Code First -所以不想手动更改数据库& SQL Server 2012 Express。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-08 13:03:07

如果你使用的是开箱即用的模板,你不必担心UsernameWebSecurity会确保它的唯一性。至于Email,这是我在目前正在开发的Web应用程序中所做的事情。

代码语言:javascript
复制
    [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中包含以下内容:

代码语言:javascript
复制
    [EmailAddress]
    [Required]
    [Display(Name = "Email")]
    public string Email { get; set; }

在视图中

代码语言:javascript
复制
    <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>
票数 3
EN

Stack Overflow用户

发布于 2013-04-08 10:23:19

我不认为有办法“自动”做到这一点。在您的帐户控制器中,在插入新用户名(创建新帐户)之前,您必须检查提交的新用户名是否已存在于数据库中,并向视图发送相应的错误消息,以防在数据库中找到用户名。

使用一些JavaScript/jQuery,您可以实现“客户端”检查,它实际上会在后台向服务器提交新的用户名(ajax请求),用于检查和显示错误,或者根据结果继续提交表单的其余部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15870211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档