淘汰赛验证

时间:2012-01-25 00:39:20

标签: knockout.js validation knockout-validation

我有asp.net mvc3项目,我在一个带有敲除绑定的表上进行批量编辑。我想在保存数据时进行必需和数字验证等验证。是否有更简单的方法来敲除验证。 PS:我没有使用表格。

3 个答案:

答案 0 :(得分:83)

查看Knockout-Validation干净地设置和使用knockout documentation中描述的内容。在:实例1:强制输入为数字

你可以see it live in Fiddle

UPDATE :小提琴已更新为使用最新的KO 2.0.3和ko.validation 1.0.2使用cloudfare CDN网址

设置ko.validation:

ko.validation.rules.pattern.message = 'Invalid.';

ko.validation.configure({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
});

要设置验证规则,请使用扩展程序。例如:

var viewModel = {
    firstName: ko.observable().extend({ minLength: 2, maxLength: 10 }),
    lastName: ko.observable().extend({ required: true }),
    emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    })
};

答案 1 :(得分:5)

如果您不想使用KnockoutValidation库,您可以编写自己的库。以下是必填字段的示例。

添加包含所有KO扩展程序或扩展程序的javascript类,并添加以下内容:

ko.extenders.required = function (target, overrideMessage) {
    //add some sub-observables to our observable
    target.hasError = ko.observable();
    target.validationMessage = ko.observable();

    //define a function to do validation
    function validate(newValue) {
    target.hasError(newValue ? false : true);
    target.validationMessage(newValue ? "" : overrideMessage || "This field is required");
    }

    //initial validation
    validate(target());

    //validate whenever the value changes
    target.subscribe(validate);

    //return the original observable
    return target;
};

然后在你的viewModel中通过以下方式扩展你的observable:

self.dateOfPayment: ko.observable().extend({ required: "" }),

这种验证方式有许多在线示例。

答案 2 :(得分:-22)

Knockout.js验证很方便,但它不健壮。您始终必须创建服务器端验证副本。在您的情况下(当您使用knockout.js时)您将JSON数据发送到服务器并异步返回,因此您可以让用户认为他看到了客户端验证,但事实上它将是异步服务器端验证。

看看这里的例子upida.cloudapp.net:8080/org.upida.example.knockout/order/create?clientId=1 这是一个"创建订单"链接。尝试点击"保存",然后玩产品。 这个例子是使用来自codeplex的upida库(有这个库的spring mvc version和asp.net mvc)完成的。