2010-05-01 22 views
6

मैं एक परियोजना में सभी एमवीसी 2, सी # और लिंक से इकाइयों को सीखने की कोशिश कर रहा हूं (हाँ, मैं पागल हूं) और मुझे DropDownListFor के साथ कुछ समस्याएं आ रही हैं और चयनसूची को पास कर रही हैं।एएसपी.नेट एमवीसी 2 ड्रॉपडाउनलिस्ट

यह मेरा नियंत्रक में कोड है:

public ActionResult Create() 
{ 
    var Methods = te.Methods.Select(a => a); 

    List<SelectListItem> MethodList = new List<SelectListItem>(); 

    foreach (Method me in Methods) 
    { 
     SelectListItem sli=new SelectListItem(); 
     sli.Text = me.Description; 
     sli.Value = me.method_id.ToString(); 
     MethodList.Add(sli); 
    } 

    ViewData["MethodList"] = MethodList.AsEnumerable(); 

    Talkback tb = new Talkback(); 
    return View(tb); 
} 

और मैं मुसीबतों DropDownListForViewData में MethodList लेने के लिए प्राप्त करने की कोशिश कर रहा हूँ। जब मैं कोशिश: बाहर

<%:Html.DropDownListFor(model => model.method_id,new SelectList("MethodList","method_id","Description",Model.method_id)) %> 

यह त्रुटियों निम्न संदेश के साथ

DataBinding: 'System.Char' does not contain a property with the name 'method_id'. 

मैं जानता हूँ कि ऐसा क्यों है, के रूप में यह एक स्ट्रिंग के रूप MethodList ले जा रहा है, लेकिन मैं समझ नहीं कैसे प्राप्त करने के लिए यह SelectList लेने के लिए। अगर मैं ऐसा एक सामान्य DropDownList साथ निम्नलिखित:

<%: Html.DropDownList("MethodList") %> 

यह इस के साथ काफी खुश है।

क्या कोई मदद कर सकता है?

उत्तर

8

संपादित करें: तो आप इकाई फ्रेमवर्क का उपयोग कर रहे हैं, हाँ?

public ActionResult Create() 
{ 
    var viewModel = new CreateViewModel(); // Strongly Typed View 

    using(Entities dataModel = new Entities()) // 'te' I assume is your data model 
    { 
     viewModel.Methods = dataModel.Methods.Select(x => new SelectListItem() 
     { 
       Text = x.Description, 
       Value = x.method_id.ToString() 
     }); 
    } 

    return View(viewModel); 
} 

आपका दृढ़ता से टाइप किया दृश्य मॉडल होगा:

public class CreateViewModel 
{ 
    public string SelectedMethod { get; set; } 
    public IEnumerable<SelectListItem> Methods { get; set; } 
} 

आपके व्यू कोड होगा इसके अलावा जानकारी आप टिप्पणी में डाल के साथ उस मामले में, अगर आप इस तरह कुछ करना चाहता हूँ होगा:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CreateViewModel>" %> 
<%-- Note the Generic Type Argument to View Page! --%> 
<%: Html.DropDownListFor(m => m.SelectedMethod, Model.Methods) %> 
+1

टॉकबैक क्लास एक एल 2 ई टेबल क्लास है। इसमें एक method_id है जिसमें विधि तालिका के साथ 0..1 संबंध है, इसलिए मेरे पास केवल उस रिकॉर्ड की विधि_आईडी से संबंधित विशेष विधि से Talkback तालिका और विधि नेविगेशन प्रॉपर्टी से method_id स्केलर प्रॉपर्टी है। तो मैं किसी विशेष टॉकबैक रिकॉर्ड से संबंधित विधि प्राप्त कर सकता हूं, क्योंकि यह एक निर्माण कार्य है, वैसे भी शून्य होगा। हालांकि, मैं टॉकबैक मॉडल के माध्यम से सभी विधियों तक पहुंच नहीं प्राप्त कर सकता हूं। आशा है कि समझ में आता है! – hermiod

+0

अतिरिक्त कोड के साथ अपडेट किया गया। इसे आज़माएं और देखें कि यह आपके लिए काम करता है या नहीं! – Tejs

+0

अब मुझे 'विधि के लिए कोई ओवरलोड' त्रुटि नहीं मिली है DropDownListFor '1 तर्क लेता है'। शायद मैंने एमवीसी को गलत समझा है लेकिन मैंने सोचा था कि डेटाबेस मॉडल से सभी दृश्यों को उत्पन्न करना और आवश्यकतानुसार संशोधित करना संभव होगा। मैंने दृश्य के माध्यम से मनमाने ढंग से सूचियों को पारित करने के कुछ उदाहरण देखे हैं (व्यूडाटा के माध्यम से, जो मेरा मूल कोड बंद था), क्या यह काम मेरी स्थिति में करने का कोई तरीका है? आपकी मदद के लिए धन्यवाद Tejs – hermiod

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