2016-03-02 10 views
5

मेरा मानना ​​है कि मैंने अपना डेटा सही तरीके से बाध्य कर दिया है, लेकिन मुझे ठीक से दिखाने के लिए प्रत्येक selectListItem के लिए मेरी टेक्स्ट प्रॉपर्टी नहीं मिल रही है।मुझे अपने DropDownList में "System.Web.Mvc.SelectListItem" क्यों मिल रहा है?

मेरे मॉडल:

public class Licenses 
    { 
     public SelectList LicenseNames { get; set; } 
     public string SelectedLicenseName { get; set; } 
    } 

नियंत्रक:

[HttpGet] 
    public ActionResult License() 
    { 
     try 
     { 
      DataTable LicsTable = BW.SQLServer.Table("GetLicenses", ConfigurationManager.ConnectionStrings["ProfressionalActivitiesConnection"].ToString()); 
      ProfessionalActivities.Models.Licenses model = new ProfessionalActivities.Models.Licenses(); 
      model.LicenseNames = new SelectList(LicsTable.AsEnumerable().Select(row => 
      new SelectListItem 
      { 
       Value = row["Description"].ToString(), 
       Text = "test" 
      })); 
      return PartialView("_AddLicense", model); 
     } 
     catch (Exception ex) 
     { 
      var t = ex; 
      return PartialView("_AddLicense"); 
     } 
    } 

दृश्य:

@Html.DropDownList("LicenseNames", new SelectList(Model.LicenseNames, "Value", "Text", Model.LicenseNames.SelectedValue), new { htmlAttributes = new { @class = "form-control focusMe" } }) 
+1

श्याजू के उत्तर के अलावा, ध्यान दें कि 'DropDownList() 'का दूसरा पैरामीटर' IEnumerable 'है। आप 'नई selectListItem {Value = row ["विवरण"] का उपयोग करके बनाते हैं। ToString(), टेक्स्ट = "test"})' जो आपको चाहिए वह सब कुछ है। 'नई सिलेक्टलिस्ट() '(जहां आप' टेक्स्ट' और 'वैल्यू' गुण सेट करना भूल गए हैं) का उपयोग कर नियंत्रक में दूसरा समान बनाना और फिर दृश्य में तीसरा एक समान बनाना केवल व्यर्थ अतिरिक्त ओवरहेड है। –

उत्तर

7

अपने LicenseNames संपत्ति के Items संपत्ति प्रकार का है जो प्रयोग करें SelectList

@Html.DropDownList("SelectedLicenseName", new SelectList(Model.LicenseNames.Items, 
             "Value", "Text", Model.LicenseNames.SelectedValue)) 

या DropDownListFor सहायक विधि

@Html.DropDownListFor(d=>d.SelectedLicenseName, 
             Model.LicenseNames.Items as List<SelectListItem>) 

साथ तो जब आप अपने प्रपत्र पोस्ट, आप SelectedLicenseName संपत्ति

[HttpPost] 
public ActionResult Create(Licenses model) 
{ 
    //check model.SelectedLicenseName 
} 
+0

ठीक है कि काम करता है। अब जब मैं पोस्ट करता हूं तो मेरे चयनित LicenseName प्रॉपर्टी को दिए गए सिलेक्टलिस्ट से चयनित मूल्य कैसे प्राप्त करूं? – JzInqXc9Dg

+0

मेरा अद्यतन उत्तर देखें। आपको फॉर्म एलिमेंट नाम का उपयोग "SelectedLicenseName" के रूप में करने की आवश्यकता है और पढ़ें कि जब फॉर्म पोस्ट किया गया है। – Shyju

+0

तो अपने दूसरे विकल्प का उपयोग करके - DropDownListForm वाला एक, मुझे यह त्रुटि तब मिलती है जब मैं आंशिक रूप से आंशिक दृश्य को कॉल करने का प्रयास करता हूं। अतिरिक्त जानकारी: 'Inumerable ' प्रकार का कोई व्यूडेटा आइटम नहीं है जिसमें कुंजी 'चयनित LicenseName' है। – JzInqXc9Dg

0

मैं स्पष्ट रूप से dataValueField और dataTextField नाम सेट का निरीक्षण कर सकते हैं।

new SelectListItem 
{ 
    Value = row["Description"].ToString(), 
    Text = "test" 
}), "Value", "Text"); 

तो फिर वहाँ (के रूप में अपने को स्वीकार कर लिया जवाब में सुझाव दिया) अपने विचारों में Model.LicenseNames.Items as List<SelectListItem> लिखने के लिए आवश्यकता नहीं है।

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