MVC中的绑定下拉列表

问题描述 投票:-2回答:2

嗨,我想从模型中绑定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>

但是,我一直在说错误

“没有类型'IEnumerable'的ViewData项具有键'FileConfigId'..”

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

asp.net-mvc asp.net-mvc-4
2个回答
0
投票

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

在视图中,您尝试使用SelectList将其转换为typeof ViewBag.FileConfigEntires as SelectList

SelectListIEnumerable<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,但在任何情况下,它在绑定到模型属性时被忽略(它的属性值决定了所选的内容)


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.