2012-10-11 20 views
9

मैं कुछ मान्यता पर आधारित कार्यों की शुरुआत करने के लिए सक्षम होना चाहते हैं क्या नियंत्रक एक दृश्य कहा जाता है से ... मैं ViewState या कुछ में एक चर सेट हो जाएगा और कहा कि मुझे पता है के लिए मदद मिलेगी क्या नियंत्रक इस विचार से बुलाया गया था।सशर्त मान्यता

दूसरे शब्दों में, मैं चाहता हूँ अगर एक निश्चित चर सेट कर दिया जाता सत्यापन आवश्यक होने की ... यहाँ कैसे मैं MVC2 में क्या करना है जब मैं बस अपना कोड में Jquery डाल का उपयोग है ...

HospitalFinNumber: { 
        required: function (element) { 
         debugger; 
         return '@isFlagSet' != 'True'; 
        }, 
        minlength: 6, 
        remote: function() { 
         //debugger; 
         return { 
          url: '@Url.Action("ValidateHosFin", "EditEncounter")', 
          data: { hospitalFin: $('#HospitalFinNumber').val(), encflag: '@encflag' } 
         }; 
        } 
       } 

आप देखते हैं कि मैं वहां क्या कर रहा हूं। यह सत्यापन केवल तभी आवश्यक होगा जब कोई निश्चित चर सेट हो ... इस मामले में, चर है FllSet ... मैं फिर न्यूनतम लंबाई निर्धारित करता हूं और यह सुनिश्चित करने के लिए एक दूरस्थ फ़ंक्शन को कॉल करता हूं कि मान अद्वितीय है।

मैं सभी मामलों में यह करने के लिए नहीं करना चाहती।

सब से मैं अब तक पढ़ा है, वहाँ कोई स्पष्ट रास्ता इस का उपयोग करते हुए unobrtusive ajax पूरा करने के लिए है? क्या मैं गलत हूं, क्या आप ऐसा कर सकते हैं? यदि नहीं, तो मैं अपने कोड में नियमित रूप से पुरानी jquery सत्यापन कैसे रख सकता हूं?

उत्तर

11

ASP.NET MVC 3 ग्राहक साइड सत्यापन प्रदर्शन करने के लिए jQuery विनीत सत्यापन का उपयोग करता है। तो आप या तो एक custom RequiredIf सत्यापन विशेषता लिख ​​सकते हैं या Mvc Foolproof Validation में उपलब्ध कराई गई एक और फिर इस्तेमाल कर सकते हैं:

public class MyViewModel 
{ 
    [RequiredIf("IsFlagSet", true)] 
    [Remote("ValidateHosFin", "EditEncounter")] 
    [MinLength(6)] 
    public string HospitalFinNumber { get; set; } 

    public bool IsFlagSet { get; set; } 

    public string EncFlag { get; set; } 
} 

तब सभी अब सिर्फ़ jquery.validate.js और jquery.validate.unobtrusive.js स्क्रिप्ट को शामिल करने या ASP.NET MVC 4 में इसी बंडल का उपयोग करने के लिए है कि उनमें शामिल है

+0

अरे डैरिन। थोड़ी देर के बाद से मैंने तुमसे सुना है। लेकिन ऐसा लगता है कि जाने का रास्ता है। – SoftwareSavant

+0

मुझे यहां जोड़ना है, कि फ़ूलप्रूफ के पास अभी भी कोई इकाई फ्रेमवर्क समर्थन नहीं है! यदि आप सोच रहे हैं कि आपको db.SaveChanges() पर "कार्यान्वित अपवाद नहीं" क्यों मिल रहा है; तुम मुझे पसंद लग रहा है और एहसास है कि यह अभी तक कोडित नहीं है जरूरत है ... यह भी देख सकते हैं: http://foolproof.codeplex.com/workitem/18457 – CodingYourLife

+1

@Darin दिमित्रोव यह MVC 4 पर काम कर bcos यह फोन नहीं किया नहीं कर रहा है RequiredIfValidator – CMMaung

3

एक अन्य समाधान अपने blog पर Andy West ने सुझाव दिया है सशर्त मॉडल राज्य से फील्ड्स निकालें नियंत्रक में:

जब प्रपत्र पोस्ट किया जाता है, मॉडल राज्य से खेतों निकाल देंगे ताकि वे मान्य नहीं कर रहे हैं :

if (Request.IsAuthenticated) 
{ 
    ModelState.Remove("CommenterName"); 
    ModelState.Remove("Email"); 
} 

यह मेरे लिए काम करता है।

+1

बुरा नहीं है। यह दो साल देर हो चुकी है, लेकिन बीमार इसे ले लो। – SoftwareSavant

+1

यह सब ठीक है और अच्छा है, लेकिन जावास्क्रिप्ट सत्यापन अभी भी किक करता है जिसमें फ़ॉर्म पोस्टिंग से रहता है और कभी भी नियंत्रक तक नहीं पहुंचता है। मेरी स्थिति में, यह था कि पंजीकरण फॉर्म में देश "यूएसए" है, फिर ज़िप को 5 या 5 + 4 प्रारूप के रूप में मान्य करें। यदि यह यूएसए नहीं है, तो उस क्षेत्र के लिए सत्यापन को अनदेखा करें। ऐसा लगता है कि यह सामान्य कार्यक्षमता होगी जिसके साथ कोई अच्छा समाधान नहीं मिल सकता है। जावास्क्रिप्ट की एक बड़ी संख्या के साथ नियंत्रक पक्ष सत्यापन के अलावा जो सत्यापन डेटा विशेषताओं को हटा देता है या जोड़ता है, जो कि अव्यवस्थित है। – stephenbayer

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