2010-05-03 17 views
7

utilizzare un DropDownList in uno dei miei create.aspx ma in qualche modo doesnt sembra funzionare ...Cosa sto facendo di sbagliato con il droplist di asp.net-mvc?

public IEnumerable<SelectListItem> FindAllMeasurements() 
    { 
     var mesurements = from mt in db.MeasurementTypes 
          select new SelectListItem 
          { 
          Value = mt.Id.ToString(), 
          Text= mt.Name 
          }; 
     return mesurements; 
    } 

e il mio controller,

public ActionResult Create() 
    { 
     var mesurementTypes = consRepository.FindAllMeasurements().AsEnumerable(); 
    ViewData["MeasurementType"] = new SelectList(mesurementTypes,"Id","Name"); 
    return View(); 
    } 

e la mia create.aspx ha questo,

<p> 
    <label for="MeasurementTypeId">MeasurementType:</label> 
    <%= Html.DropDownList("MeasurementType")%> 
    <%= Html.ValidationMessage("MeasurementTypeId", "*") %> 
    </p> 

Quando eseguo questo ho ottenuto questi errori,

DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a 
property with the name 'Id'. 

risposta

7

Nel vostro controller che si sta creando un nuovo SelectList da IEnumerable<SelectListItem>, che non è corretto perché hai già specificato le proprietà Value e Text.

si hanno due opzioni:

public ActionResult Create() 
{ 
    var mesurementTypes = consRepository.FindAllMeasurements(); 
    ViewData["MeasurementType"] = mesurementTypes; 
    return View(); 
} 

o:

public ActionResult Create() 
{ 
    ViewData["MeasurementType"] = new SelectList(db.MeasurementTypes, "Id", "Name"); 
    return View(); 
} 

C'è anche una terza e preferita modo utilizzando la vista fortemente tipizzato:

public ActionResult Create() 
{ 
    var measurementTypes = new SelectList(db.MeasurementTypes, "Id", "Name"); 
    return View(measurementTypes); 
} 

e nella vista:

<%= Html.DropDownList("MeasurementType", Model, "-- Select Value ---") %> 
+0

@Ya cara che ha funzionato ... Come aggiungere "Seleziona" come 0 ° indice in quella lista? –

+0

+1 Darin :) arg, ero troppo lento :( –

+0

@PieterG Come aggiungere "Seleziona" come 0 ° indice in quella lista? –

1

Come il messaggio di errore implica, è necessario un IEnumerable<SelectList>, non un IEnumerable<Materials>.

Il costruttore di SelectList ha un sovraccarico che accetta un oggetto IEnumerable. Vedere .net MVC, SelectLists, and LINQ

+0

@Robert guarda la mia modifica ... –

+0

@Pandiya: Bene, ora è una domanda completamente diversa. Vedo che hai trovato "SelectList". –

Problemi correlati