【问题标题】:There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key没有具有键的“IEnumerable<SelectListItem>”类型的 ViewData 项
【发布时间】:2015-03-04 21:59:17
【问题描述】:

我正在尝试从数据库表中填充下拉列表,

我收到此错误:

没有具有键“QuartierId”的“IEnumerable”类型的 ViewData 项。

描述 : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle。 Contrôlez la trace de la pour pour plus d'informations sur l'erreur et son origine dans le code。

异常详细信息:System.InvalidOperationException:没有具有键“QuartierId”的“IEnumerable”类型的 ViewData 项。

这里是我的模型“QuartierSet”

   public partial class Quartier
{
    public Quartier()
    {
        this.Publication = new HashSet<Publication>();
    }

    public int Quartier_Id { get; set; }
    public string Quartier_Libelle { get; set; }

    public virtual ICollection<Publication> Publication { get; set; }
    public virtual Ville Ville { get; set; }
}

我的控制器端:

 public ActionResult CreateOffreLocation(OffreLocation offreLocation)
    {
        try
        {

            ViewBag.QuartierId = new SelectList(db.QuartierSet, "Quartier_Id", "Quartier_Libelle");
            db.PublicationSet.Add(offreLocation);
            db.SaveChanges();
            return RedirectToAction("ListOffreLocation");

        }
        catch
        {
            return RedirectToAction("Error");
        }
    }

我的观点:

       @Html.DropDownList("QuartierId", String.Empty)

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    ViewBag 仅可从您将其设置到其操作视图的操作中使用。

    设置ViewBag 后,您将重定向到另一个操作,因此ViewBag 再次设置为null

    您需要在 ListOffreLocation 操作中添加以下行,而不是 CreateOffreLocation

    ViewBag.QuartierId = new SelectList(db.QuartierSet, "Quartier_Id", "Quartier_Libelle");
    

    【讨论】:

    • 或者只是添加这一行 ViewBag.QuartierId = new SelectList(db.QuartierSet, "Quartier_Id", "Quartier_Libelle");到一个名为 ListOffreLocation 的新操作,然后返回更有意义的视图
    • 我的“ListOffreLocation”返回位置信息列表,我不明白为什么我必须把 viewBag 放在那里,我不需要下拉列表,public ActionResult ListOffreLocation() { return查看(db.PublicationSet.OfType().ToList()); }
    • 你有ListOffreLocation视图中的下拉列表操作权
    • 否,“ListOffreLocation”是一个从我的数据库返回注册列表的操作,在创建操作中,我需要从一个名为“quartier”的小表中填充一个下拉列表,其名称为街道,在验证创建表单后,我将导航重定向到“ListOffreLocation”视图......希望你明白我的意思!
    • 但在创建操作中您不会返回视图
    【解决方案2】:
    @Html.DropDownList((SelectListItem)ViewBag.QuartierId, String.Empty)
    

    【讨论】:

    • 虽然可以说是一个很好的答案,但请考虑为其添加描述。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2020-06-28
    • 2020-08-20
    • 2011-02-20
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多