MVC中的绑定下拉列表

时间:2018-02-27 17:25:42

标签: asp.net-mvc asp.net-mvc-4

您好我正在尝试从模型中绑定MVC中的下拉列表。

这是我的模特

[Table("FileConfig")]
public class FileConfigModel
{
    [Key]
    [Display(Name = "File Congif ID")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int FileConfigId { get; set; }
    ....
    [Display(Name = "Description")]
    public string Description { get; set; }
}

这是我在控制器中的getall方法:

public List<FileConfigModel> GetAll()
{
    return db.FileConfigModels.ToList();
}

然后我从另一个控制器中调用它

public ActionResult Create()
{
     var fileConfigListEntries = new FileConfigController().GetAll()
        .Select(fc => new SelectListItem
        {
            Value = fc.FileConfigId.ToString(),
            Text = fc.Description,
            Selected = false
        });
    ViewBag.FileConfigEntires = fileConfigListEntries;
    return View();
}

以下是我的观点:

@Html.LabelFor(model => model.FileConfigId, new { @class = "control-label col-md-2" })
<div class="col-md-10">
    @Html.DropDownListFor(model => model.FileConfigId, ViewBag.FileConfigEntires as SelectList, "-Select File Config")
    @Html.ValidationMessageFor(model => model.FileConfigId)
</div>

然而,我一直在收到错误说

  

&#34;没有类型&#39; IEnumerable&#39;的ViewData项目。具有密钥&#39; FileConfigId&#39; ..&#34;

有人可以帮助我,告诉我我错过了什么。

2 个答案:

答案 0 :(得分:0)

上述错误的可能原因可能是变量fileConfigListEntries为null或者没有从dbcontext获取数据。 由于下拉列表以null或集合为界,没有元素错误,因为“没有类型'IEnumerable'的ViewData项具有键'FileConfigId'..” 我建议用硬编码数据替换fileConfigListEntries视图包数据,看看错误消失。

答案 1 :(得分:0)

您对fileConfigListEntries的查询(即..Select(fc => new SelectListItem{ .. })会返回IEnumerable<SelectListItem>

在视图中,您可以尝试使用SelectList

将其转换为ViewBag.FileConfigEntires as SelectList类型

SelectList IEnumerable<SelectListItem>,但IEnumerable<SelectListItem> 不是 SelectList,因此转换失败, DropDownListFor()的第二个参数是null。当第二个参数为null时,该方法期望第一个参数为IEnumerable<SelectListItem>,而不是它,因此是例外。

将您的代码更改为

@Html.DropDownListFor(m => m.FileConfigId, ViewBag.FileConfigEntires as IEnumerable<SelectListItem>, ... )

@Html.DropDownListFor(model => model.FileConfigId, (IEnumerable<SelectListItem>)ViewBag.FileConfigEntires, ... )

旁注在Selected = false子句中没有设置.Select - 默认情况下为false,但无论如何,在绑定到模型属性时忽略它(它的值确定所选内容的属性