2012-01-25 15 views
44

मेरे पास asp.net mvc3 प्रोजेक्ट है जहां मैं नॉकआउट बाइंडिंग वाले टेबल पर एक बड़ा संपादन करता हूं। मैं डेटा सहेजते समय आवश्यक और संख्या सत्यापन जैसे सत्यापन करना चाहता हूं। सत्यापन को नकारने का कोई आसान तरीका है। पीएस: मैं रूपों का उपयोग नहीं कर रहा हूं।नॉकआउट सत्यापन

उत्तर

82

Knockout-Validation पर एक नज़र डालें जो knockout documentation में वर्णित है जो स्पष्ट रूप से सेटअप और उपयोग करता है। के तहत: लाइव उदाहरण 1: जबरदस्ती इनपुट सांख्यिक होना

आप see it live in Fiddle

अद्यतन कर सकते हैं: बेला cloudfare CDN का उपयोग कर नवीनतम KO 2.0.3 और 1.0.2 ko.validation उपयोग करने के लिए अद्यतन किया गया है यूआरएल

सेटअप ko.validation करने के लिए:

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

ko.validation.configure({ 
    registerExtenders: true, 
    messagesOnModified: true, 
    insertMessages: true, 
    parseInputAttributes: true, 
    messageTemplate: null 
}); 
सेटअप प्रमाणीकरण नियम, उपयोग करने के लिए extenders

। उदाहरण के लिए:

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.' } 
    }) 
}; 
+2

क्या यह मुझे है या आईई 9 और आईई 10 पर टूट गया है? क्रोम और फ़ायरफ़ॉक्स पर काम करता है '। –

+0

@rob: आईई 9 मुझे एक देता है; "स्क्रिप्ट को माइम टाइप मिस्चैच के कारण अवरुद्ध कर दिया गया था" -error। शायद आप इस सुरक्षा जांच को अक्षम कर सकते हैं। – Cohen

+2

@rob: इसे आईई में काम करने के लिए, मैंने संसाधनों को हटा दिया है और knockout.validation को बेवकूफ (बदसूरत, मुझे पता है) में कॉपी किया है, हालांकि यह काम करता है: http://jsfiddle.net/KHFn8/1369/ – Cohen

-21

Knockout.js सत्यापन आसान है लेकिन यह मजबूत नहीं है। आपको हमेशा सर्वर साइड सत्यापन प्रतिकृति बनाना होगा। आपके मामले में (जैसा कि आप knockout.js का उपयोग करते हैं) आप सर्वर पर JSON डेटा भेज रहे हैं और असीमित रूप से वापस भेज रहे हैं, ताकि आप उपयोगकर्ता को यह सोच सकें कि वह क्लाइंट साइड सत्यापन को देखता है, लेकिन असल में यह असीमित सर्वर साइड सत्यापन होगा।

उदाहरण पर एक नज़र डालें upida.cloudapp.net:8080/org.upida.example.knockout/order/create?clientId=1 यह "ऑर्डर बनाएं" लिंक है। "सेव" पर क्लिक करने और उत्पादों के साथ खेलने का प्रयास करें। यह उदाहरण कोडेप्लेक्स से अपिडा लाइब्रेरी (इस लाइब्रेरी का वसंत एमवीसी संस्करण और एएसपीएनटी एमवीसी) का उपयोग करके किया जाता है।

+16

-1 यह नॉकआउट के लिए विशिष्ट नहीं है। सभी जावास्क्रिप्ट को सर्वर पर हमेशा सत्यापित करने की आवश्यकता है। नॉकआउट सत्यापन पुस्तकालय क्लाइंट पक्ष को मान्य करता है। – Mike

+0

सर्वर साइड सत्यापन को पिंग करने के लिए अतिरिक्त चक्र जोड़ना मुझे लगता है कि जब तक आप वास्तव में क्लाइंट पक्ष को मान्य नहीं कर सकते हैं तब तक उपयोगी नहीं है :) फिर सर्वर-साइड के माध्यम से सुनिश्चित करें। यह तथ्य है कि आप केओ या किसी अन्य ढांचे का उपयोग करते हैं – DropHit

+0

@ सेन टोरबर्न सहमत। मैंने यह भी नहीं सोचा था कि यह एक जवाब का बुरा था। मैं कुछ परिदृश्यों में यह काफी अच्छी तरह से काम कर सकता था। – MPavlak

5

यदि आप KnockoutValidation लाइब्रेरी का उपयोग नहीं करना चाहते हैं तो आप अपना खुद का लिख ​​सकते हैं। एक अनिवार्य क्षेत्र के लिए यहां एक उदाहरण दिया गया है।

आप सभी को एक्सटेंशन या extenders के साथ एक जावास्क्रिप्ट वर्ग जोड़ें, और निम्नलिखित जोड़ें:

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: "" }), 

उदाहरण के एक संख्या हैं सत्यापन की इस शैली के लिए ऑनलाइन।

+0

ठीक है, लेकिन मुझे सर्वर दृश्य से AJAX और mvc razor और knockout.mapping के माध्यम से मेरा व्यूमोडेल मिल रहा है। मैं .net mvc, न्यूटन जेसन रूपांतरण, और एचटीएलएमएल कच्चे सहायकों का उपयोग कर सर्वरसाइड से सीधे जावास्क्रिप्ट मॉड्यूल में भी आयात करता हूं ... अब .... मैं एक समय में एक फ़ील्ड को देखने के बिना अपने अवलोकनों को कैसे बढ़ा सकता हूं – Clarence

संबंधित मुद्दे