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

Javascript 使用jQuery和MVC检查用户名可用性,javascript,jquery,asynchronous,asp.net-mvc-5,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: "

我有一个用户名文本框,我想在用户键入时检查它是否可用。我已将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>
@Html.LabelFor(m=>m.UserName,htmlAttributes:new{@class=“control label col-md-2”})
@EditorFor(m=>m.UserName,new{htmlAttributes=new{@class=“form control”,@id=“UserName”+Model.PersonId})
控制器如下所示:

 // 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!";
    }
//GET:Student/CheckUserName
公共异步任务检查用户名(字符串用户名)
{
var exists=await db.Students.Where(u=>u.UserName==UserName.FirstOrDefaultAsync();
如果(exists==null){返回“该用户名可用!”;}
返回“该用户名不可用!”;
}
一切都很好——至少看起来是这样。我希望用户名至少为6个字符,因此我最初设置为在5个字符后开始检查,但我看到了奇怪的结果,所以我将其更改为0。仍然得到奇怪的结果,我认为这与绑定到“keypress”事件有关,但我不确定

它只会在用户键入第7个字符(字符或空格)后检查6个字符的密码


因此,如果我输入的密码像“candy4”一样不可用,它不会告诉我它不可用,直到我输入像“candy45”这样的东西,它本身可能是可用的,但消息会说这不是因为它响应的是“candy4”不可用。我希望这有道理。

好吧,我是个白痴。我刚把“按键”改为“按键”,它的工作原理和我预期的一样。当我在写这个问题的时候考虑过这个问题后,这是有意义的——我想这就是有时候所需要的全部

为什么您要使用
$(“#UserName")+@Html.Raw(Json.Encode(Model.PersonId))
而不是仅仅使用
$(“#UserName”)
(并删除
@id=“UserName”+Model.PersonId
)?MVC已经配备了所有内置的组件-请参阅