2012-10-24 20 views
30

मैं पिछले एक Dropdownlisfor चयन के परिणाम प्राप्त करने के लिए एक खाली Dropdownlistfor निर्माण करने के लिए करना चाहते हैं:एक कास्केड उप-सूची के लिए एक खाली MVC DropdownListFor बिल्ड

वास्तविक दृश्य:

<div id="makes"> 
     @Html.DropDownListFor(m => m.Make_Id, Model.MakeList, HeelpResources.DropdownlistMakeFirstRecord) 
    </div> 
    <div id="models"> 
     @Html.DropDownListFor(m => m.Model_Id, Model.ModelList, HeelpResources.DropdownlistModelFirstRecord) 
    </div>   

वास्तविक नियंत्रक (मैं एक खाली SelectedList का निर्माण करने के लिए किया था काम करने के लिए, लेकिन यह यह करने के लिए है करने के लिए अजीब लगता है):

public virtual ActionResult Create() 
    { 
     // Build the Dropdownlist for the Makes 
     var makesDto = _makeService.ListAllMakes(); 
     var makesViewModel = Mapper.Map<IList<MakeDto>, IList<MakeViewModel>>(makesDto); 

     // Build the Dropdownlist for the Models 
     var makeId = -1; 
     var modelsDto = _modelService.ListModelByMake(makeId); 
     var modelsViewModel = Mapper.Map<IList<ModelDto>, IList<ModelViewModel>>(modelsDto); 

     // Build the ViewModel to return to the View 
     CreateAdViewModel viewModel = new CreateAdViewModel(); 
     viewModel.MakeList = new SelectList(makesViewModel, "ID", "Name"); 
     viewModel.ModelList = new SelectList(modelsViewModel, "ID", "Name"); 

     return View(viewModel); 
    } 

वहाँ कुछ इस तरह का निर्माण करने का कोई तरीका है: @ एचटीएमएल.ड्रोडाउन लिस्टफ़ोर (एम => एम। मॉडेल_आईडी, शून्य)

और // नियंत्रक से मॉडल के लिए ड्रॉपडाउन सूची बनाएं // हटाएं?

धन्यवाद

उत्तर

88

GetModels में इस सूची में नीचे अपने ड्रॉप छड़ी एक समाधान है कि मुझे लगता है कि मिले सबसे अच्छा है क्योंकि यह ड्रॉपड्रॉपलिस्ट को खाली बनाने के लिए कोई सेवा कॉल नहीं है और यह दृढ़ता से टाइप किया गया है:

@Html.DropDownListFor(m => m.Model_Id, Enumerable.Empty<SelectListItem>(), HeelpResources.DropdownlistModelFirstRecord) 
+2

शानदार धन्यवाद पैट्रिक! – Shawn

+0

यदि आप इसे अपने स्वयं के प्रश्न के उत्तर के रूप में चिह्नित करते हैं तो यह अच्छा होगा। –

+0

@ एजे। टिप्पणी के लिए धन्यवाद :) – Patrick

0

व्यक्तिगत तौर पर मैं jQuery का एक सा है और एक अतिरिक्त आंशिक दृश्य के साथ ऐसा होता है। आपका प्रपत्र ऐसा दिखाई दे सकता:

<div id="makes"> 
     @Html.DropDownListFor(m => m.Make_Id, Model.MakeList, HeelpResources.DropdownlistMakeFirstRecord) 
</div> 
<div id="models"> 

</div> 

<script type="text/javascript"> 
$(function(){ 
    $("#Make_Id").change(function(){ 
     $("#models").load("/Controller_Name/GetModels/" + this.val()); 
    } 
}); 
</script> 

और फिर अपने नियंत्रक में:

public ActionResult GetModels(int id) 
{ 
    ViewBag.DdlModels = new SelectList(rep.GetModelsForCar(id), "Id", "Name"); 
    return PartialView(); 
} 

और फिर बस आंशिक दृश्य

+0

और मॉडल लटकती दृढ़ता से दृश्य आंशिक दृश्य आने वाले में टाइप हो जाता है? यह ModelMId चयनित मान को ड्रॉपडाउन से व्यूमोडेल के अंदर नियंत्रक तक पास कर देगा? – Patrick

0

निम्नलिखित काम कर रहा है:

@Html.DropDownListFor(m => m.Model_Id, **new SelectList(new List<string>()**)); 
+1

पर आधारित कर सकें धन्यवाद! मुझे इसे आजमा देना है;) – Patrick