繁体   English   中英

验证唯一的用户名在ASP.NET MVC4中不起作用

[英]Validation for unique username not working in ASP.NET MVC4

我试图验证用户名的唯一性,但由于某些原因,它无法正常工作。 我正在以以下方式进行

模型

public class System_User
    {
        public int Id { get; set; }

        [Required]
        public string FirstName { get; set; }

        [Required]
        public string LastName { get; set; }

        [Required]
        [Remote("doesUserNameExist", "System_User", HttpMethod = "POST", ErrorMessage = "User name already exists. Please enter a different user name.")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
        public bool IsAdmin { get; set; }
    }

控制者

我已将以下代码添加到我的System_User控制器中

 [HttpPost]
        public JsonResult doesUserNameExist(string UserName)
        {

            var user = Membership.GetUser(UserName);

            return Json(user == null);
        }

视图我具有由mvc生成的默认创建视图,并带有对jquery的必要引用

@model WhiteBoard.Models.System_User

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)


    <table class="userTable">
        <tr>
            <td>
                @Html.LabelFor(model => model.FirstName)
            </td>

            <td>
                @Html.EditorFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.FirstName)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.LastName)
            </td>

            <td>
                @Html.EditorFor(model => model.LastName)
                @Html.ValidationMessageFor(model => model.LastName)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.UserName)
            </td>

            <td>
                @Html.EditorFor(model => model.UserName)
                @Html.ValidationMessageFor(model => model.UserName)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.Password)
            </td>

            <td>
                @Html.EditorFor(model => model.Password)
                @Html.ValidationMessageFor(model => model.Password)
            </td>
        </tr>


        <tr>
            <td>
                @Html.LabelFor(model => model.IsAdmin)
            </td>

            <td>
                @Html.EditorFor(model => model.IsAdmin)
                @Html.ValidationMessageFor(model => model.IsAdmin)
            </td>
        </tr>
        <tr>

            <td colspan="2">
                <input class="btn btn-success" type="submit" value="Create User" />
            </td>
        </tr>
    </table>
}
<div>
    <p>

        @Html.ActionLink("Back to List", "Index")
    </p>
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}

当我运行该应用程序时,它既未引发异常,也未生效。

我可以知道我在哪里犯错

看起来一个问题是:

return Json(user == null);

如果用户为null,则当您要返回false时,您将返回true,该用户不存在。 更改为

return Json(user != null);

如果这不起作用或==只是一种类型,请在评论中让我们知道您输入的用户名,预期结果是什么以及实际结果是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM