2012-10-20 9 views
8

यहां से पढ़ना में बाध्यकारी DropDownList: ASP.NET MVCMVC देखें

कार्रवाई SelectCategory नियंत्रक के अंदर बनाया गया है -

public ActionResult SelectCategory() { 

    List<SelectListItem> items = new List<SelectListItem>();  
    items.Add(new SelectListItem { Text = "Action", Value = "0"});  
    items.Add(new SelectListItem { Text = "Drama", Value = "1" });  
    items.Add(new SelectListItem { Text = "Comedy", Value = "2", Selected = true });  

    ViewBag.MovieType = items; 

    return View();  
} 

मैं लाइन निम्नलिखित में डाटा के बंधन को समझने में सक्षम नहीं हूँ।

@Html.DropDownList("MovieType") 

समान तरीके से डेटा बाइंडिंग, वहीं

@Html.DropDownList("IdList"); 

मैं निम्नलिखित प्राप्त त्रुटि-

There is no ViewData item of type 'IEnumerable' that has the key 'IdList'.

नियंत्रक कार्रवाई:

public ActionResult SelectId() 
    { 
     List<SelectListItem> items = new List<SelectListItem>(); 
     items.Add(new SelectListItem { Text = "MyId1", Value = "MyId1", Selected=true }); 
     items.Add(new SelectListItem { Text = "MyId2", Value = "MyId2" }); 

     ViewBag.IdList = items; 
     return View(); 
    } 

डब्ल्यू क्या मुझे याद आ रही है? आपके सहयोग के लिए धन्यवाद !

+0

सब कुछ ठीक हो रहा है। हो सकता है कि आपको @ Html.DropDownList (ViewBag.IdList) आज़माएं; –

+0

एचटीएमएल.ड्रॉपडाउनलिस्ट में 8 (आठ) ओवरलोड हैं जो आपको सूची में दिखाए जाने वाले सूची सहित सबकुछ निर्दिष्ट करने की अनुमति देते हैं। कृपया Html.DropDownList के प्रलेखन के माध्यम से यहां जाएं –

+0

इस एचटीएमएल को निकालने का प्रयास करें। डॉपडाउनलिस्ट ("कोई नाम", व्यूबैग.इडलिस्ट) - यह कन्स्ट्रक्टर दो पैरा स्वीकार करता है - नाम और सूची जिसे आप प्रदर्शित करना चाहते हैं –

उत्तर

21

आप निर्धारित किया है ViewBag.MovieType => पर उपयोग किया जाने @Html.DropDownList("MovieType") ड्रॉपडाउन इस मान का उपयोग करेगा। जब आप @Html.DropDownList("IdList") लिखते हैं, तो हेल्पर को व्यूबैग में संबंधित IdList प्रॉपर्टी नहीं मिलती है और एक त्रुटि फेंकता है क्योंकि यह नहीं जानता कि डेटा को कहां से बांधना है।

@Html.DropDownList("SelectedMovieType", (IEnumerable<SelectListItem>)ViewBag.MovieType) 

और अपनी पोस्ट कार्रवाई चयनित मान प्राप्त करने के लिए एक SelectedMovieType पैरामीटर होगा:

वैकल्पिक रूप से आप लटकती आप निम्नलिखित इस्तेमाल कर सकते हैं का नाम बदलना चाहते हैं।

लेकिन मैं व्यूबैग से बचूंगा। एक दृश्य के मॉडल को परिभाषित करना बेहतर है:

public class MyViewModel 
{ 
    public string SelectedMovieType { get; set; } 
    public IEnumerable<SelectListItem> MovieTypes { get; set; } 
} 

और फिर अपने नियंत्रक कार्रवाई इस दृश्य मॉडल पॉप्युलेट है और यह देखने के लिए पारित:

public ActionResult SelectId() 
{ 
    List<SelectListItem> items = new List<SelectListItem>(); 
    items.Add(new SelectListItem { Text = "MyId1", Value = "MyId1", Selected=true }); 
    items.Add(new SelectListItem { Text = "MyId2", Value = "MyId2" }); 

    var model = new MyViewModel 
    { 
     MovieTypes = items  
    }; 

    return View(model); 
} 

और अपने प्रबलता से टाइप किये ध्यान में रखते हुए:

@model MyViewModel 
@Html.DropDownListFor(x => x.SelectedMovieType, Model.MovieTypes) 
3

जबकि बाध्यकारी आप सूची लटकती के लिए आप टाइप करने के लिए IEnumerable करने के लिए इसे डाली आप @ Html.DropDown नियंत्रण जो नहीं है का उपयोग के रूप में दृढ़ता से मॉडल

साथ टाइप दृश्य में

@Html.DropDownList("MovieType",(IEnumerable<SelectListItem>)ViewBag.MovieType) 

और के लिए की जरूरत है एक और तरीका है अगर आप IdList बाँध तो

@Html.DropDownList("IdList",(IEnumerable<SelectListItem>)ViewBag.IdList) 
+0

हाय शिवकुमार, ऊपर कोड त्रुटि फेंकता है: 'टाइप की कोई व्यूडाटा आइटम नहीं है' IENumerable 'जिसमें कुंजी' IdList 'है। कोई सुझाव? – Abhijeet

+0

@autrevo क्या आप मुझे त्रुटि के कुछ स्नैप दिखा सकते हैं क्योंकि मैं इसे पुन: पेश करने में सक्षम नहीं हूं – Shivkumar

+0

यह धन्यवाद काम करता है। – Abhijeet

0

मॉडल के लिए डेटा बाध्य करने के लिए बाध्यकारी डेटा के लिए एक दर्द रहित तरीका: ड्रॉपडाउन के लिए रेज़र का उपयोग न करें। इसे मैन्युअल रूप से बाध्य करें, इसे फॉर्मकॉलेक्शन ऑब्जेक्ट के साथ प्राप्त करें।

नियंत्रक:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(Sorun sorun,FormCollection fc) 
    { 
     //Define independently as form collection 

     sorun.GonderilecekBirim = fc["GonderilecekBirim"]; 
     sorun.IlkSorulmaTarihi = DateTime.Now; 
     if (ModelState.IsValid) 
     { 

      db.Soruns.Add(sorun); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(sorun); 
    } 

देखें

@Html.LabelFor(model => model.GonderilecekBirim, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      <!-- Define as raw html --> 
      <select id="GonderilecekBirim" name="GonderilecekBirim"> 
       <option value="4">Satın Alma</option> 
       <option value="5">Muhasebe</option> 
      </select> 

      @*@Html.ValidationMessageFor(model => model.GonderilecekBirim, "", new { @class = "text-danger" })*@ 
     </div> 
संबंधित मुद्दे