【问题标题】:Validation / Remote Validation with knockout.js in vb.net mvc在 vb.net mvc 中使用 knockout.js 进行验证/远程验证
【发布时间】:2014-06-24 15:28:06
【问题描述】:

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

我以为我可以使用远程验证,但页面使用了 knockout.js,因此视图模型是 JavaScript。根据我收集的信息,我必须传入我的模型,该模型在 VB 中具有数据注释才能使用远程验证。我似乎找不到包含 html 的此功能的示例,因此很难弄清楚。

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

我认为我最终必须在控制器上调用我的函数来检查数据库,我可以使用更多的 jquery/html 属性来尽可能干净地做到这一点,而我正在努力解决这个问题。感谢您的建议。

【问题讨论】:

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


    【解决方案1】:

    您可以订阅视图模型上可观察到的用户名的更改,并向将返回布尔值的控制器发出 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*/);
       }
    }
    

    【讨论】:

    • 感谢您提供详尽的示例。似乎与 onchange 基本相同,但更具动态性和更多利用更多淘汰赛的能力。
    猜你喜欢
    • 2017-03-10
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多