没有类型为“IEnumerable<SelectListItem>”的ViewData项具有键“Profession”。

7

我需要在注册页面上添加下拉列表,并希望将所选项保存到数据库中。我的代码如下:

在视图页面中:

<%: Html.DropDownListFor(m => m.Profession, (IEnumerable<SelectListItem>)ViewData["ProfessionList"])%>                   
<%: Html.ValidationMessageFor(m => m.Profession)%> 

在模型类中:

[Required]
[DisplayName("Profession")]
public string Profession { get; set; } 

在控制器中:

ViewData["ProfessionList"] =
                new SelectList(new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5"}
                .Select(x => new { value = x, text = x }),
                "value", "text");

我遇到了错误:没有名为“Profession”的数据项类型为“IEnumerable”的 ViewData。

我该怎么做才能解决这个问题?


将其转换为“SelectList”,你为什么要将其转换为IEnumerable<SelectListItem>?DropDownListFor方法接受selectList。 - Furqan Hameedi
我将它转换为“SelectList”,但是我仍然得到相同的错误。我认为它期望的是IEnumerable<SelectListItem>,所以我使用了它。 - Marta
2个回答

12

我建议使用视图模型(View Model)替代ViewData。 因此:

public class MyViewModel
{
    [Required]
    [DisplayName("Profession")]
    public string Profession { get; set; } 

    public IEnumerable<SelectListItem> ProfessionList { get; set; }
}

并且在你的控制器中:

public ActionResult Index()
{
    var professions = new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5" }
         .Select(x => new SelectListItem { Value = x, Text = x });
    var model = new MyViewModel
    {
        ProfessionList = new SelectList(professions, "Value", "Text")
    };
    return View(model);
}

而在你的视角中:

<%: Html.DropDownListFor(m => m.Profession, Model.ProfessionList) %>
<%: Html.ValidationMessageFor(m => m.Profession) %>

8
您可以在视图中像这样定义SelectList:
<%: Html.DropDownListFor(m => m.Profession, new SelectList(new string[] {"Prof1", "Prof2", "Prof3", "Prof4", "Prof5"}, "Prof1"))%>
                <%: Html.ValidationMessageFor(m => m.Profession)%>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接