没有键为“Conve”的“IEnumerable”类型的 ViewData 项
Posted
技术标签:
【中文标题】没有键为“Conve”的“IEnumerable”类型的 ViewData 项【英文标题】:There is no ViewData item of type 'IEnumerable' that has the key 'Conve' 【发布时间】:2021-07-09 16:00:14 【问题描述】:我正在对应用程序进行调整并进行更新。它向我抛出以下错误:
没有具有键“Conve”的“IEnumerable”类型的 ViewData 项。
我的 DropDownList 完美加载数据,但是当我选择该列表中的任何一个以使用其值并将其更改为我的 BD 中的值时,它会引发该错误
模型:TableAsign.cs
public class TableAsign
public long IdCliente get; set;
public string nombre get; set;
控制器:MastController.cs
[Authorize]
public ActionResult Asign_Conv(int idUsuario)
List<Models.TableAsign> lst = null;
using (TPConveniosEntities db = new TPConveniosEntities())
lst = (from d in db.Cliente
orderby d.nombre
select new TableAsign
IdCliente = d.idCliente,
nombre = d.nombre
).ToList();
List<SelectListItem> items = lst.ConvertAll(d =>
return new SelectListItem()
Text = d.nombre.ToString(),
Value = d.IdCliente.ToString(),
Selected = false
;
);
ViewBag.items = items;
using (TPConveniosEntities db = new TPConveniosEntities())
Usuario user = db.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
return View(user);
在这部分中,它执行 UPDATE,在我看来,当我将 DropDownList 的值与我的 long 一起带来时,它必须这样做strong> 变量,它会抛出错误,然后当我咨询我的数据库时,我看到它是否执行 UPDATE 但给了我该错误
[Authorize]
[HttpPost]
public ActionResult Asign_Conv(FormCollection collection)
using (TPConveniosEntities contexto = new TPConveniosEntities())
var idUsuario = Convert.ToInt32(collection["IdUsuario"].Trim());
Usuario user = contexto.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
var userName = collection["usuario"].Trim();
long IdCliente = Convert.ToInt32(collection["Convenio"].Trim());
user.userName = userName;
user.idCliente = IdCliente;
contexto.SaveChanges();
return View(user);
查看:Asign_Conv.cshtml
@using TPConvenios.App_Data;
@model Usuario
@
Layout = null;
AjaxOptions ajaxOpciones = new AjaxOptions
UpdateTargetId = "cuerpoPopUpGenerico2",
InsertionMode = InsertionMode.Replace,
OnSuccess = "OnSuccess_Asign",
OnFailure = "OnFailure"
;
List<SelectListItem> items = (List<SelectListItem>)ViewBag.items;
<div id="contenedor" style="margin: 15px 30px">
@using (Ajax.BeginForm("Asign_Conv", "Mast", null, ajaxOpciones, new id = "Asign_Conv" ))
@Html.ValidationSummary(true);
<input type="hidden" name="idUsuario" id="idUsuario" value="@(null != Model ? Model.idUsuario : 0)" />
<p>
<input name="usuario" type="text" id="usuario" class="usuario" placeholder="Usuario" value="@(null != Model ? Model.userName : String.Empty)"/>
</p>
<p>
@Html.DropDownList("Convenio", items, "Seleccione el Convenio", new @class = "form-control" )
</p>
<p id="bot">
<input name="submit" type="submit" id="submit" value="Asignar" class="botonNuevo" style="float: right" />
</p>
</div>
【问题讨论】:
【参考方案1】:我设法解决了我的问题,方法是将加载 DropdownList 时使用的代码粘贴到执行 UPDATE 的 POST 中。
保持这种状态
[Authorize]
[HttpPost]
public ActionResult Asign_Conv(FormCollection collection)
using (TPConveniosEntities contexto = new TPConveniosEntities())
var idUsuario = Convert.ToInt32(collection["IdUsuario"].Trim());
Usuario user = contexto.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
var userName = collection["usuario"].Trim();
long IDCliente = Convert.ToInt32(collection["Conve"].Trim());
/*********** ESTO FUE LO QUE COPIE PARA QUE FUNCIONARA **********/
List<Models.TableAsign> lst = null;
using (TPConveniosEntities db = new TPConveniosEntities())
lst = (from d in db.Cliente
orderby d.nombre
select new TableAsign
IdCliente = d.idCliente,
nombre = d.nombre
).ToList();
List<SelectListItem> items = lst.ConvertAll(d =>
return new SelectListItem()
Text = d.nombre.ToString(),
Value = d.IdCliente.ToString(),
Selected = false
;
);
ViewBag.items = items;
/*************************** HASTA AQUI **********************/
user.userName = userName;
user.idCliente = IDCliente;
contexto.SaveChanges();
return View(user);
【讨论】:
以上是关于没有键为“Conve”的“IEnumerable”类型的 ViewData 项的主要内容,如果未能解决你的问题,请参考以下文章
没有具有键 'xxx' 的 'IEnumerable<SelectListItem>' 类型的 ViewData 项
当类没有实现 IEnumerable 时,GetEnumerator 方法是不是仍然是幂等的
为啥我的 DisplayFor 没有循环通过我的 IEnumerable<DateTime>?