将视图模型映射到KnockoutJS验证

时间:2012-02-16 01:11:17

标签: javascript asp.net-mvc validation knockout.js

我使用KnockoutJS,KnockoutJS Mapping插件和jQuery 1.7.1使用ASP.NET MVC 2构建了一个页面。我希望能够使用KnockoutJS Validation插件(找到here)。但是,我需要同时进行服务器端和客户端验证。

是否可以让我的视图模型映射到使用.extend()方法的KnockoutJS Validation plugin

编辑:示例。自动转动:

[Required]
public string Firstname { get; set; }

进入这个:

var viewmodel = {
    firstname: ko.observable().extend({ required: true });
}

4 个答案:

答案 0 :(得分:7)

Mvc Controls Toolkit我实现了一个引擎,它可以在knockout.js上启用通常的Mvc验证(数据注释或其他)。可以启用客户端和服务器端验证。此外,敲除可以与Mvc助手一起使用,一些绑定是自动推断的等等。

答案 1 :(得分:5)

如果您正在使用knockoutjs和jquery,我想出了以下非常简单的方法来进行基本的客户端验证。

无论您希望在网页上显示错误消息,请在其中加入以下标记:

<span name="validationError" style="color:Red" 
data-bind="visible: yourValidationFunction(FieldNameToValidate())">
* Required.
</span>

显然你需要编写“yourValidationFunction”来做任何你想做的事情。它只需要返回true或false,true表示显示错误。

如果显示任何验证错误,您可以使用jquery来阻止用户继续。您可能已经有一个保存按钮,可以触发javascript函数来执行某些ajax或其他操作,所以只需将它包含在它的顶部:

 if ($("[name='validationError']:visible").length > 0) {
        alert('Please correct all errors before continuing.');
        return;
    }

这比许多其他验证解决方案更简单,更灵活。您可以将错误消息放在任何位置,也不需要学习如何使用某些验证库,无论服务器端技术如何,此方法都可以正常工作。

答案 2 :(得分:1)

我建议使用内置的MVC客户端验证,您可能需要调用它,试试这个:

$.validator.unobtrusive.parse(yourFormElement)

代码来自:https://stackoverflow.com/a/5669575/941536

不确定MVC2是否具有不显眼的客户端验证,但不确定在必要时是否可以选择升级到MVC3。

答案 3 :(得分:0)

验证插件的工作方式是扩展要验证的可观察对象。

如果它们是从映射创建的,那么只需创建一个在mappning完成后运行的函数并添加所需的所有验证。

或者,如果您需要,可以使用验证绑定。阅读Github上的自述文件进行淘汰验证,你会看到他们是如何做到的。