我有一个用户名文本框,我想在用户输入时检查它是否可用。我已经设置了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;没有。我希望这是有道理的。
答案 0 :(得分:0)
好吧,我是个白痴。我刚刚将“keypress”更改为“keyup”,它按照我的预期运行。在我写这个问题的时候想到它之后才有意义 - 我想这有时候需要它!