使用jQuery和MVC检查用户名可用性

时间:2015-10-24 20:36:11

标签: javascript jquery asynchronous asp.net-mvc-5

我有一个用户名文本框,我想在用户输入时检查它是否可用。我已经设置了jQuery:

$(document).ready(function () {
    $("#UserName_" + @Html.Raw(Json.Encode(Model.PersonId))).bind("keypress", function () {
        if($(this).val().length > 0) {
            $.ajax({
                url: "/Student/CheckUserName",
                type: "GET",
                data: { userName: $("#UserName_"  + @Html.Raw(Json.Encode(Model.PersonId))).val() },
                success: function (data, responseStatus, jQXHR) {
                    $("#WRAPPERDIVID_" + @Html.Raw(Json.Encode(Model.PersonId))).html(data);
                }
            });
        }
    });
});

这样的页面就是这样:

@Html.LabelFor(m => m.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-xs-6 col-md-4">
    @Html.EditorFor(m => m.UserName, new { htmlAttributes = new { @class = "form-control", @id = "UserName_" + Model.PersonId } })
    <div id="WRAPPERDIVID_@Model.PersonId"></div>
</div>

控制器看起来像这样:

 // GET: Student/CheckUserName
    public async Task<String> CheckUserName(String username)
    {
        var exists = await db.Students.Where(u => u.UserName == username).FirstOrDefaultAsync();
        if (exists == null) { return "That User Name is available!"; }
        return "That User Name is NOT available!";
    }

一切正常 - 或者看起来如此。我希望用户名至少为6个字符,所以我最初设置为在5个字符后开始检查,但我看到奇怪的结果,所以我将其更改为0.仍然得到奇怪的结果,我认为它与绑定有关到&#34;按键&#34;事件,但我不确定。

在用户输入第7个字符(字符或空格)后,它只会检查六个字符的密码。

因此,如果我输入的密码不像&#34; candy4&#34;那么它就不会告诉我它是不可用的,直到我输入&#34; candy45& #34;,它本身可能是可用的,但是消息会说它不是因为它响应了&#34; candy4&#34;没有。我希望这是有道理的。

1 个答案:

答案 0 :(得分:0)

好吧,我是个白痴。我刚刚将“keypress”更改为“keyup”,它按照我的预期运行。在我写这个问题的时候想到它之后才有意义 - 我想这有时候需要它!