【问题标题】:Error DropDownListFor in MVC [duplicate]MVC中的错误DropDownListFor [重复]
【发布时间】:2016-11-13 19:55:50
【问题描述】:

我正在尝试在下拉列表中列出我的客户,但出现此错误:

具有键“cliente”的 ViewData 项属于“System.Int32”类型,但必须属于“IEnumerable”类型。

我在 3 个不同的控制器上有相同的代码,其中两个可以正常工作。

控制器:

 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);
    }

然后在 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>

我只是在这里阅读了几十个主题,没有成功。

【问题讨论】:

  • 因为ModelState 无效并且您返回视图,但您没有重新分配ViewBag.Clientes(您只有在ModelState 有效时才这样做,这是没有意义的)

标签: c# html asp.net-mvc razor


【解决方案1】:

为了调试,你想把它们分成一行并设置一个断点。

将 select 语句设为Select(x =&gt; x) 进行测试。

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;

【讨论】:

【解决方案2】:

在实际返回IEnumerable&lt;int&gt; 的操作方法中从您的LINQ 查询中删除选择部分Select(x =&gt; x.id,)。可以

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

【讨论】:

  • 抛出相同的错误:System.InvalidOperationException:具有键“cliente”的 ViewData 项属于“System.Int32”类型,但必须属于“IEnumerable”类型。 第 213 行:Html.DropDownListFor(model => model.cliente, (SelectList)ViewBag.Clientes, "Selecione", new { class= "form-control", style = "width: 450px" })跨度>
  • @LeonardoD'Amato,这很奇怪。看到这个帖子stackoverflow.com/questions/3393521/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2017-11-23
  • 2018-08-31
  • 2017-04-05
相关资源
最近更新 更多