2012-03-30 14 views
6

मेरे पास "संस्कृति" संपत्ति के साथ एक मॉडल श्रेणी "देश" है जो आवश्यकतानुसार चिह्नित नहीं है। एक अन्य वर्ग "कंट्री व्यू मॉडेल" में वही संपत्ति "संस्कृति आईडी" है।एएसपी.नेट एमवीसी गैर-आवश्यक फ़ील्ड के लिए सत्यापन जोड़ता है

"बनाएं" दृश्य को प्रस्तुत करते समय, मैंने देखा कि प्रमाणीकरण डेटा विशेषताओं को "संस्कृति आईडी" टेक्स्टबॉक्स में जोड़ा गया था, हालांकि कोई डेटा एनोटेशन नहीं जोड़ा गया था।

मैं

@Html.HiddenFor(mode => mode.CultureId) 

उपयोग कर रहा हूँ क्या इस तरह के एक व्यवहार के लिए कारण हो सकता है? इस http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

namespace MvcApplication1.Models 
{ 
[MetadataType(typeof(MovieMetaData))] 
public partial class Movie 
{ 
} 


public class MovieMetaData 
{ 
    [Required] 
    public object Title { get; set; } 

    [Required] 
    [StringLength(5)] 
    public object Director { get; set; } 


    [DisplayName("Date Released")] 
    [Required] 
    public object DateReleased { get; set; } 
} 

}

यह आप डेटाबेस पक्ष पर मॉडल के बिना सत्यापन सेट में मदद करता है

धन्यवाद

उत्तर

0

यदि आप डेटा व्याख्या का उपयोग कर सकते हैं, आप की जांच करनी चाहिए।

+0

उनकी समस्या किसी संपत्ति पर आवश्यक सेट करने के तरीके के बारे में नहीं है, लेकिन वह अवांछित HTML सत्यापन से बचने के तरीके के बारे में नहीं है। इसके अलावा, विशेषता प्रबंधन का आपका तरीका गतिशील डेटा का सामान्य है, एमवीसी आमतौर पर – themarcuz

+0

काम नहीं करता है, मैंने सोचा कि यह मेटाडेटा कक्षा खाली होने पर सत्यापन नियमों को ओवरराइड कर देगा –

12

मैं आपकी संस्कृति का अनुमान लगा रहा हूं ID एक int है। एमवीसी स्वचालित रूप से आवश्यक टैग को गैर-शून्य मूल्य प्रकारों में जोड़ता है।

इसे बंद कर देते Application_Start को

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

जोड़ें या अपने पूर्णांक नल बनाने के

+0

पहले से ही वही व्यवहार जोड़ा गया है। मैं int nullable बनाने की कोशिश करेंगे। धन्यवाद – Bill

+1

अच्छा जवाब। यह 'डेटा-आवश्यक 'सत्यापन से छुटकारा पाने के लिए काम करता है, लेकिन तब से आईडी' int 'है, यह' डेटा-वैल-नंबर 'जोड़ता है जो अभी भी बनाने की कोशिश करते समय फॉर्म सबमिशन को रोकता है। मैं 0 जैसे डिफ़ॉल्ट मानों को सेट करके इसके आसपास काम कर सकता हूं, लेकिन मुझे यह नहीं करना चाहिए। – eudaimos

+0

मेरा बुरा - यह काम करता है क्योंकि सत्यापन छिपे हुए इनपुट – eudaimos

0

इस प्रयास करें:

ModelState["CultureId"].Errors.Clear(); 

if (ModelState.IsValid)  
    { 
     ..... 
    } 

तो CultureId तो यह भी आप इच्छित परिणाम दे देंगे पूर्णांक है ...

+1

के लिए 'डेटा-वैल-नंबर' छोड़ना प्रतीत होता है यह एक कल्ज है जो यहां शामिल वास्तविक समस्या से बचाता है। [अधिक के लिए dskh से उत्तर] देखें (http://stackoverflow.com/a/9941032/237838)। –

8

हैंडल करने के कुछ तरीके हैं ई यह -
ए)।

public int? Age { get; set; } 
public int? Age { get; set; } 

बी) जैसी संपत्ति को शून्य के रूप में बनाएं। नियंत्रक वर्ग में नीचे का उपयोग करें -

ModelState["Age"].Errors.Clear(); 

सी)। स्टार्टअप में जोड़ें- DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

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