2011-02-03 6 views
9

(सिर्फ MVC सीखने)एएसपी नेट MVC - मॉडल के भाग के रूप में एक enum का उपयोग

मैं एक मॉडल वर्ग बनाया है:

public class Employee 
    { 
     public int ID { get; set; } 

     [Required(ErrorMessage="TM Number is Required")] 
     public string tm_number { get; set; } 

     //use enum? 
     public tmRank tm_rank { get; set; } 
    } 

मॉडल वर्ग enum 'tmRank' को दर्शाता है:

public enum tmRank 
    { 
     Hourly, Salary 
    } 

जब मैं इस मॉडल से एक दृश्य बनाता हूं तो 'tm_rank' फ़ील्ड दिखाई नहीं देता है? मेरी आशा थी कि एमवीसी enum मूल्यों की एक सूची बना देगा।

+0

आपका विचार अभी कैसा दिखता है? क्या आप 'EditorFor()' या कुछ और का उपयोग कर रहे हैं? – marcind

उत्तर

12

मेरा अनुमान है कि यह समझ में नहीं आता है कि एनम के लिए किस प्रकार का क्षेत्र बनाना है। एक एनम ड्रॉपडाउन सूची, रेडियो बटनों का एक सेट, एक टेक्स्ट बॉक्स इत्यादि से बंधे जा सकते हैं

आप अपने एनम के लिए किस प्रकार की प्रविष्टि चाहते हैं? क्या उन्हें इसे एक सूची से चुनना चाहिए? उत्तर देने से हमें उस स्थिति के लिए आवश्यक कोड के साथ मदद मिल सकती है।

अपनी टिप्पणी प्रति कोड जोड़ने के लिए संपादित:

public static SelectList GetRankSelectList() 
{ 

    var enumValues = Enum.GetValues(typeof(TmRank)).Cast<TmRank>().Select(e => new { Value = e.ToString(), Text = e.ToString() }).ToList(); 

    return new SelectList(enumValues, "Value", "Text", ""); 
} 
फिर अपने मॉडल में

:

public class Employee 
{ 
    public Employee() 
    { 
     TmRankList = GetRankSelectList(); 
    } 

    public SelectList TmRankList { get; set; } 
    public TmRank TmRank { get; set; } 
} 

और अंत में आप के साथ अपने दृश्य में इसका इस्तेमाल कर सकते हैं:

<%= Html.DropDownListFor(c => c.TmRank, Model.TmRankList) %> 

यह TmRankList में enum मान रखेंगे। जब आपका फॉर्म पोस्ट किया जाता है, तो टीएमआरएंक चयनित मूल्य रखेगा।

मैंने इसे दृश्य स्टूडियो के बिना लिखा था, इसलिए समस्याएं हो सकती हैं। लेकिन यह सामान्य दृष्टिकोण है जिसका उपयोग मैं इसे हल करने के लिए करता हूं।

+0

आप सही हैं - मैं उम्मीद कर रहा था कि उपयोगकर्ता किसी सूची से चयन करे। –

+0

क्या लेबल के लिए मूल्य प्राप्त करने का कोई तरीका होगा बल्कि एक ड्रॉपडाउन? – Jamiegs

+0

हाँ, आप चुनिंदा सूचियों को छोड़ सकते हैं, क्योंकि लेबल के साथ सूची की वास्तव में कोई अवधारणा नहीं है। बस Html.LabelFor (c => c.Property) – mfanto

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