非常简单的目标,我想确保用户输入的用户名在输入后立即是唯一的。
我以为我可以使用远程验证,但该页面使用knockout.js,因此viewmodel是JavaScript。从我收集的内容中,我必须在我的模型中传递,该模型在VB中具有数据注释以使用远程验证。我似乎无法找到包含html的此功能的示例,因此很难弄清楚。
我如何通过淘汰赛完成类似的事情?我见过另一个淘汰验证库,但不想在解决方案中添加另一个库,除非它是唯一的选择。它似乎应该有一个比jquery onchange事件更好的东西,并使用AJAX来调用我的控制器上的函数。
我想我最终必须在控制器上调用我的函数来检查数据库,它更多的是我可以使用的jquery / html属性尽可能干净地完成这项工作。谢谢你的任何建议。
答案 0 :(得分:2)
您可以订阅viewmodel上可观察用户名的更改,并向将返回bool的控制器发出ajax请求。
像这样的东西
1)您的视图模型
function registrationViewModel() {
var self = this;
self.username = ko.observable();
self.usernameUniqueue = ko.observable(true);
self.username.subscribe (function() {
$.ajax({
url: '/registration/isusernameuniqueue',
data: { username: self.userName() },
type: 'POST',
success: function(result) {
self.usernameUniqueue(result);
}
});
});
}
ko.applyBindings(new registrationViewModel())
2)您的观点
<input type="text" data-bind="value: username" />
<span data-bind="visible: !usernameUniqueue()" style="display:none">user name not uniqueue</span>
3)您的控制器
public class Registration : Controller
{
[HttpPost]
public ActionResult IsUsernameUniqueue(string username)
{
// make a check here and return true or false...
return Json(/*true or false*/);
}
}