使用vb.net mvc中的knockout.js进行验证/远程验证

时间:2014-05-07 15:02:18

标签: jquery asp.net-mvc vb.net asp.net-mvc-4 knockout.js

非常简单的目标,我想确保用户输入的用户名在输入后立即是唯一的。

我以为我可以使用远程验证,但该页面使用knockout.js,因此viewmodel是JavaScript。从我收集的内容中,我必须在我的模型中传递,该模型在VB中具有数据注释以使用远程验证。我似乎无法找到包含html的此功能的示例,因此很难弄清楚。

我如何通过淘汰赛完成类似的事情?我见过另一个淘汰验证库,但不想在解决方案中添加另一个库,除非它是唯一的选择。它似乎应该有一个比jquery onchange事件更好的东西,并使用AJAX来调用我的控制器上的函数。

我想我最终必须在控制器上调用我的函数来检查数据库,它更多的是我可以使用的jquery / html属性尽可能干净地完成这项工作。谢谢你的任何建议。

1 个答案:

答案 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*/);
   }
}