'没有具有密钥的'IEnumerable <selectlistitem>'类型的ViewData项。

时间:2018-04-25 18:45:44

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

当我提交表单时出现此错误,我很困惑,因为我在其他视图上使用相同的方法,它完美地工作就在这个视图上

继承我的模特

public class Usuario
{
    [Required(ErrorMessage = "Ingrese una cedula")]
    //[StringLength(8,MinimumLength = 8,ErrorMessage = "La cedula debe poseer 8 digitos")]
    public int Id { get; set; }

    [Required(ErrorMessage = "Ingrese un nombre")]
    public string Nombre { get; set; }

    [Required(ErrorMessage = "Ingrese un primer apellido")]
    public string Apellido1 { get; set; }

    [Required(ErrorMessage = "Ingrese segundo apellido")]
    public string Apellido2 { get; set; }

    [Required(ErrorMessage = "Ingrese un nombre de usuario")]
    public string NombreUsuario { get; set; }

    [Required(ErrorMessage = "Ingrese una contraseña")]
    [DataType(DataType.Password)]
    public string Contraseña { get; set; }

    public int IdRol { get; set; }

    public string Correo { get; set; }

    public int Telefono { get; set; }

    public bool Temporal { get; set; }

    public string Mensaje { get; set; }
}

public class Rol
{

    [AutoIncrement]
    public int Id { get; set; }
    public string Nombre { get; set; }

}

这是视图上的下拉列表中的代码

 <div class="form-group">
        <label class="control-label col-md-2">Rol</label>
        <div class="col-md-10">
            @Html.DropDownList("ddlRol", (IEnumerable<SelectListItem>)ViewBag.ddlRol,"Seleccione un rol", new { @class = "control-label-col-md-2" })

        </div>
    </div>

继承我的控制器

 public ActionResult Crear()
    {
        var roles = mRol.ListarRoles();
        ViewBag.ddlRol = new SelectList(roles, "Id", "Nombre");
        return View();
    }

当我点击提交按钮时,我收到了错误 '没有类型'IEnumerable'的ViewData项具有键'ddlRol'。'

我已经尝试过其他帖子的解决方案,但是他们没有工作,或者我不知道我是否做错了请问有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

您在DropDownList上缺少值属性。在DropDownListFor中,您必须始终具有文本和值变量。 使用@Html.DropDownListFor和SelectList的更好方法。

示例:查看

@Html.DropDownListFor(x => x.YourModel, new SelectList(ViewBag.customValue, "Text", "Value"), new { htmlAttributes = new { @class = "form-control" } })

示例:控制器

List<SelectListItem> listForSelect = new List<SelectListItem>();

    listForSelect.Add(new SelectListItem { Text = "Your text", Value = "Your value" });

    ViewBag.customValue = listForSelect;