Javascript 使用jQuery和MVC检查用户名可用性
我有一个用户名文本框,我想在用户键入时检查它是否可用。我已将jQuery设置为: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: "
$(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已经配备了所有内置的组件-请参阅