2013-05-07 5 views
6

Ho un modello:errore MVC 4 DropDownListFor - Non v'è alcun Viewdata elemento di tipo 'IEnumerable <SelectListItem>' che ha la chiave

public class Auction 
{ 
    public string Title { get; set; } 
    public string category { get; set; } 
} 

e un controller:

[HttpGet] 
public ActionResult UserForm() 
{ 

    var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" }); 
    ViewBag.categoryList = categoryList; 
    return View(); 

} 

Nel Vedi ho queste righe:

<div class="editor-field"> 
    @Html.DropDownListFor(model => 
     model.category,(SelectList)ViewBag.categoryList) 
    @Html.ValidationMessageFor(model => model.category) 

</div> 

l'errore che ottengo quando provo a salvare il modulo è:

012.351.

Non esiste un elemento ViewData di tipo "IEnumerable" che abbia la chiave "categoria". Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di rivedere la traccia dello stack per ulteriori informazioni sull'errore e su dove è stato creato il codice .

Dettagli eccezione: System.InvalidOperationException: non esiste ViewData voce di tipo 'IEnumerable' che ha la chiave 'categoria'.

Non capisco qual è il problema, dal momento che ho fatto (o cercato di fare) tutto ciò che viene fatto in questa guida: https://www.youtube.com/watch?v=7HM6kDBj0vE

Il video può anche essere trovato in questo link (Capitolo 6 - binding automaticamente i dati nella richiesta): http://www.lynda.com/ASPNET-tutorials/ASPNET-MVC-4-Essential-Training/109762-2.html

risposta

10

l'errore ottengo quando provo a salvare forma

Ecco dove si trova il tuo problema. Sospetto che tu non abbia ricostruito la tua lista nel tuo metodo post. Le seguenti righe di codice che hai nel tuo metodo get dovrebbero anche essere nel tuo metodo post, specialmente se stai restituendo la stessa vista, o una vista che usa ViewBag.categoryList in un elenco a discesa.

var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" }); 
ViewBag.categoryList = categoryList; 

Si ottiene quel tipo di errore quando si utilizza un oggetto null con l'helper HTML dropdownlistfor. Tale errore può essere facilmente riprodotto se si fa qualcosa di simile

@Html.DropDownListFor(model => model.PropertyName,null) 
// or 
@Html.DropDownList("dropdownX", null, "") 
+1

grazie mille! Questa è ovviamente la risposta corretta. –

+0

Quello che non capisco, è il motivo per cui ho bisogno di ricostruire nella funzione di post la stessa lista? Ho pensato di aver bisogno solo del risultato che è stato scelto dall'utente e che ritorna nel campo categoria del modello. –

+0

La domanda è: stai usando la vista di ritorno che ha '@ Html.DropDownListFor (model => model.category, (SelectList) ViewBag.categoryList)'? Se è così allora non importa da dove proviene. Che importa è che fornisci la vista con un elenco ** non NULL **. Se proviene da un post, dopo aver fatto un post i valori non ci sono più - semplicemente perché non li hai "postati". –

-1

Ho avuto lo stesso problema, credo che quando si sta per creare Viewdata dagli stessi dati della tabella nella stessa controller con nome diverso che genera tale errore, Ho appena copiato il mio vecchio ViewData dalla vecchia funzione (metodo) alla nuova funzione (metodo) nello stesso controller e questo ha funzionato per me.

Problemi correlati