敲除validation
我有一个asp.net mvc3项目,我在一个表上用批量绑定进行批量编辑。 我希望在保存数据的同时进行必要的validation和数字validation。 有没有更简单的方法来淘汰validation。 PS:我没有使用表格。
看一下Knockout-Validation ,这个清理设置和使用敲除文档中描述的内容 。 Under:Live示例1:强制input为数字
你可以看到它住在小提琴
更新 :小提琴已更新使用最新的KO 2.0.3和ko.validation 1.0.2使用cloudfare CDNurl
要设置ko.validation:
ko.validation.rules.pattern.message = 'Invalid.'; ko.validation.configure({ registerExtenders: true, messagesOnModified: true, insertMessages: true, parseInputAttributes: true, messageTemplate: null });
要设置validation规则,请使用扩展程序。 例如:
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.' } }) };
如果你不想使用KnockoutValidation库,你可以自己写。 这是一个强制性字段的例子。
添加一个JavaScript类与你所有的KO扩展或扩展,并添加以下内容:
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扩展你可观察到的:
self.dateOfPayment: ko.observable().extend({ required: "" }),
网上有很多这种validation方式的例子。
Knockout.jsvalidation是方便的,但它不健壮。 你总是必须创build服务器端validation副本。 在你的情况(你使用knockout.js),你正在发送JSON数据到服务器和asynchronous回来,所以你可以让用户认为他看到客户端validation,但实际上它将是asynchronous服务器端validation。
看看这里的例子upida.cloudapp.net:8080/org.upida.example.knockout/order/create?clientId=1这是一个“创build订单”链接。 尝试点击“保存”,并玩产品。 这个例子是从codeplex使用upida库(这个库有spring mvc版本和asp.net mvc)完成的。