【发布时间】:2013-02-22 01:43:30
【问题描述】:
将 MVC 4 与 KnockoutJS 一起使用。我可以将不显眼的验证与自定义敲除绑定绑定吗?我目前正在使用带有afterRender 的模板重新绑定验证。我希望它自动添加到绑定中。像这样:
ko.bindingHandlers.egtZipRep = {
init: function (element, valueAccessor, allBindingsAccessor, context) {
$(element).inputmask("99999", { "placeholder": " " });
egtUniqueNameBinding(element, ++ko.bindingHandlers['uniqueName'].currentIndex);
applyValidationRules(element); // Is it possible to do this here?
ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, context);
}
};
我整天都在摆弄它。如果效率极低,我就做不到。
我目前的做法如下。也许我应该对此感到高兴。但我猜人们之前已经尝试过。
self.ReferenceAfterRender = function (element) {
bindUnobtrusiveValidation(element);
}
// Bind validation on new content
function bindUnobtrusiveValidation(element) {
// Bind to fields - must be called everytime new field is created
$.validator.unobtrusive.parseDynamicContent(element);
}
$.validator.unobtrusive.parseDynamicContent = function (selector) {
// Use the normal unobstrusive.parse method
$.validator.unobtrusive.parse(selector);
// Get the relevant form
var form = $(selector).first().closest('form');
// Get the collections of unobstrusive validators, and jquery validators
// and compare the two
var unobtrusiveValidation = form.data('unobtrusiveValidation');
var validator = form.validate();
if (typeof (unobtrusiveValidation) != "undefined") {
$.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
if (validator.settings.rules[elname] === undefined) {
var args = {};
$.extend(args, elrules);
args.messages = unobtrusiveValidation.options.messages[elname];
$('[name=' + elname + ']').rules("add", args);
} else {
$.each(elrules, function (rulename, data) {
if (validator.settings.rules[elname][rulename] === undefined) {
var args = {};
args[rulename] = data;
args.messages = unobtrusiveValidation.options.messages[elname][rulename];
$('[name=' + elname + ']').rules("add", args);
}
});
}
});
}
【问题讨论】:
-
我想我不得不处理这个问题,也许我可以挖掘一下我是如何处理这个问题的。
-
好吧,我从来不用创建任何自定义验证绑定,我们使用 MVC 的属性来输出验证属性,并且在进行 AJAX 调用时还使用了
parseDynamicContent辅助方法。浏览 jquery.unobtrusive.js,我确信有一个方法可以调用来动态添加规则。
标签: jquery asp.net-mvc-4 knockout.js unobtrusive-validation