我使用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 });
}
答案 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上的自述文件进行淘汰验证,你会看到他们是如何做到的。