2016-07-11 11 views
0

Ich versuche, meine Kunden auf einer Dropdownlist-Liste, aber ich bin immer diese Fehlermeldung:Fehler DropDownListFor in MVC

The ViewData item that has the key 'cliente' is of type 'System.Int32' but must be of type 'IEnumerable'.

ich den gleichen Code auf 3 verschiedene Controller haben, und in zwei von ihnen, Es klappt.

Controller:

public ActionResult Create([Bind(Include = "id,osmanual,empresa,funcionario,cliente,requisitante,recepcionar,motorista,smsr,smsu,smsm,emailenviado,status,observacaostatus,diahora,todosrecepcionar,requisitantenome,requisitantecelular,requisitanteenviarsms,requisitanteenviaremail,departamento,ramal,pgtoccusto,faturadocc,cartaoautorizada,cartaoautorizadaerro,cartaodatadebito,recepcionarnome,recepcionarenviarsms,recepcionarenviaremail,local,transladopara,origem,linhaaerea,nvoo,celular,email,motoristaenviarsms,kmtranslado,kmtransladopreco,tempoespera,tempoesperapreco,estacionamento,pedagio,estacionamentopedagiopreco,nomecartao,numero,codigo,validade,valor,datacadastro,dataeditado")] ordensservicos ordensservicos) 
    { 
     if (ModelState.IsValid) 
     { 
      ViewBag.Clientes = new SelectList(db.clientes.Where(x => x.excluido == 0).OrderBy(x => x.nomefantasia).Select(x => x.id,), "id", "nomefantasia", 0); 

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

     return View(ordensservicos); 
    } 

Und dann in HTML:

<div class="form-group" style="width: 450px"> 
 
    @Html.Label("Cliente ") 
 
    @Html.DropDownListFor(model => model.cliente, (SelectList)ViewBag.Clientes, "Selecione", new { @class = "form-control", @style = "width: 450px" }) 
 
    @Html.ValidationMessageFor(model => model.cliente, "", new { @class = "text-danger" }) 
 
</div>

ich nur Zehn Thema lesen Sie hier, ohne Erfolg.

+0

Weil 'ModelState' ist ungültig und Sie kehren die Sicht, aber Sie haben nicht neu zugewiesen' ViewBag.Clientes' (Sie tun es nur, wenn 'ModelState' gültig ist, die sinnlos ist) –

Antwort

0

Entfernen Sie den ausgewählten Teil Select(x => x.id,) aus Ihrer LINQ-Abfrage in der Aktion mehod Ursache, die tatsächlich IEnumerable<int> zurückgibt. Es kann

sein
 ViewBag.Clientes = new SelectList(db.clientes 
         .Where(x => x.excluido == 0) 
         .OrderBy(x => x.nomefantasia), "id", "nomefantasia", 0); 
+0

den gleichen Fehler zu werfen: ** System.InvalidOperationException: Das ViewData-Element mit dem Schlüssel 'cliente' ist vom Typ 'System.Int32', muss jedoch vom Typ 'IEnumerable ' sein. ** Zeile 213: Html.DropDownListFor (model = > Model.cliente, (SelectList) ViewBag.Clientes, "Selecione", neu {class = "form-control", style = "Breite: 450px"}) –

+0

@ LeonardoD'Amato, das ist seltsam. Siehe diesen Beitrag http://stackoverflow.com/questions/3393521/the-viewdata-item-that-has-the-key-my-key-is-of-type-system-string-but-must – Rahul

2

Zum Debuggen möchten Sie sie in eine einzelne Zeile aufteilen und einen Haltepunkt festlegen.

Wählen Sie die Anweisung Select(x => x) zum Testen aus.

var items = db.clientes.Where(x => x.excluido == 0).OrderBy(x => x) 
    .Select(x => x).ToList(); 
var clientes = new SelectList(items, "id", "nomefantasia", 0); 
ViewBag.Clientes = clientes; 
+0

Sie könnten wollen Schauen Sie sich auch [Beste Programmierpraxis der Verwendung von DropDownList in ASP.Net MVC] (http://Stackoverflow.com/a/37819577/296861) an. – Win

Verwandte Themen