C# ';没有类型为';IEnumerable<;选择列表项>';那有钥匙;

C# ';没有类型为';IEnumerable<;选择列表项>';那有钥匙;,c#,asp.net-mvc,razor,html.dropdownlistfor,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;

我在提交表单时遇到了这个错误,我很困惑,因为我在其他视图上使用了相同的方法,它在这个视图上运行得非常好

这是我的模型

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>
当我点击submit(提交)按钮时,它显示了一个错误 '没有具有键'ddrol'的'IEnumerable'类型的ViewData项。'


我已经尝试过其他帖子的解决方案,但是它们不起作用,或者我不知道我是否做错了什么,请有人给我解释一下好吗?

你在DropDownList上缺少了值Atibute。在DropDownList for中,您必须始终具有文本和值变量。 将@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;
List listForSelect=new List();
添加(新建SelectListItem{Text=“Your Text”,Value=“Your Value”});
ViewBag.customValue=listForSelect;

我已经尝试过这些解决方案,但没有一个对我有效如果你将其转换为
选择列表而不是
IEnumerable
@Html.DropDownList(“ddrol”,(SelectList)ViewBag.ddrol,“Seleccione un rol”,新的{@class=“control-label-col-md-2”})遇到相同的错误System.InvalidOperationException:“没有类型为“IEnumerable”且键为“ddrol”的ViewData项。”最近是否重新编译了该项目?我以前也遇到过这个错误。每次我进行更改时,我都会重新编译项目==============全部重建:4成功,0失败,0跳过===========正如您可以在我的控制器中看到的那样,我为值和文本定义了一个属性:ViewBag.ddrol=新选择列表(角色,“Id”,“Nombre”);在我看来,我使用的是html.dropdownlist而不是html.dropdownlist的dropdownlist(“ddrol”,(IEnumerable)ViewBag.ddrol,“Seleccione un rol”,new{@class=“control-label-col-md-2”)Torake on html.dropdownlist你只有1个属性,需要2个(文本,值)@Torake 1用于在html中显示值,第二个用于将数据解析到modeli have ViewBag.ddlRol=new SelectList(角色,“Id”,“Nombre”);其中“Id”是值,“Nombre”是文本,“roles”是角色items@Torake再次检查HTMLDROPDOWN-只有1个属性。您在视图中而不是控制器中遇到问题。
List<SelectListItem> listForSelect = new List<SelectListItem>();

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

    ViewBag.customValue = listForSelect;