2011-09-05 9 views
18

मैं cshtml फ़ाइल में एक dropdownlistfor है:MVC dropdownlistfor चिह्नित नहीं है के रूप में आवश्यक है लेकिन अभी भी आवश्यक है

public long KategoriaWlasnaId { get; set; } 

लेकिन: आवश्यक के रूप में कोई भी टिप्पणी के बिना

var kategorie_wlasna = new SelectList(
    (from z in Model.Kategoria 
    where !formReadOnly || z.Id == Model.KategoriaWlasnaId 
     select z), 
    "Id", 
    "Nazwa"); 
... 
@Html.DropDownListFor(
    model => model.KategoriaWlasnaId, 
    kategorie_wlasna, 
    "----", 
    htmlClassDropDownListDef) 

मेरी ViewModel में मैं संपत्ति है क्षेत्र अभी भी आवश्यक है। ब्राउज़र में मुझे मिलता है:

<select class="input-validation-error form_object1" data-val="true" data-val-number="The field KategoriaWlasnaId must be a number." data-val-required="The KategoriaWlasnaId field is required." id="KategoriaWlasnaId" name="KategoriaWlasnaId"> 
    <option value="">-----</option> 
    <option value="1227">Wykroczenie</option> 
    <option value="1228">Przestępstwo</option> 
</select> 

मुझे क्या याद आ रही है?

उत्तर

37

यह सामान्य है। मूल्य प्रकार हमेशा आवश्यक हैं। आप अपनी संपत्ति नल कर सकता है:

public long? KategoriaWlasnaId { get; set; } 

अब यह अब आवश्यक हो जाएगा और यदि उपयोगकर्ता लटकती में किसी भी तत्व का चयन नहीं करता अपने मूल्य null हो जाएगा। और यह आवश्यक है और संदेश आप आवश्यक विशेषता के साथ इसे सजाने सकता निजीकृत यदि आप बनाना चाहते थे:

[Required] 
public long? KategoriaWlasnaId { get; set; } 
+0

तुम बहुत मैच धन्यवाद। मैंने इस तरह के मामूली समाधान को पूरी तरह याद किया है। – blackik

+0

धन्यवाद। यह सही समझ में आता है कि मूल्य प्रकारों को "स्वचालित रूप से आवश्यक" होना चाहिए, फिर भी मैं इस समस्या के लिए भी गिरने में कामयाब रहा। – Moshe

4

आप डिफ़ॉल्ट DataAnnotationsModelValidatorProvider ताकि मूल्य प्रकार में Global.asax.cs को निम्नलिखित लाइनों को जोड़कर की आवश्यकता नहीं होगी संशोधित कर सकते हैं Application_Start विधि:

ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider()); 
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
0

तो डेटाप्रकार (लंबी उपयोग करें) बहुत जरूरी तो यह भी सिर्फ स्ट्रिंग के लिए लंबे समय से बदल कर काम करेंगे नहीं है

सार्वजनिक लंबे KategoriaWlasnaId {मिल; सेट; }

सार्वजनिक स्ट्रिंग KategoriaWlasnaId {get; सेट; }

यह भी

सार्वजनिक लंबा? KategoriaWlasnaId {प्राप्त करें; सेट; }

भी यदि आप डेटा एनोटेशन का उपयोग कर रहे हैं आप Nullable विशेषता के रूप में अच्छी तरह से उपयोग कर सकते हैं कर सकते हैं

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