“自定义模型和列表中没有”IEnumerable <selectlistitem>'类型的ViewData项错误

时间:2015-06-20 00:25:02

标签: c# asp.net-mvc

我在视图中有这个下拉列表:

@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as SelectList, new { @class = "form-control" })

如您所见,下拉列表的名称为Sale.TypeTransaction,因为Sale它是自定义模型中的模型:

public class OfficeSale
{
    public OfficeSale()
    {
        SaleProductRelations = new List<SaleProductRelation>();
        Sale = new Sale();
    }
    public Sale Sale { get; set; }
    public List<SaleProductRelation> SaleProductRelations { get; set; }
}

Sale拥有属性TypeTransaction,它是string。在我的控制器中,我按如下方式填写选择列表:

    public ActionResult NewSale()
    {
        var list = new List<SelectListItem>();
        list.Add(new SelectListItem { Text = "Cash", Value = "Cash" });
        list.Add(new SelectListItem { Text = "Credit", Value = "Credit" });
        list.Add(new SelectListItem { Text = "Promotion", Value = "Promotion" });

        ViewBag.typetransaction = list;
        return View(new OfficeSale());
    }

我知道如果我的viewbag与我的属性名称相同,则下拉列表已填充。但我不能写ViewBag.sale.typetransaction。你有什么想法解决这个问题吗?提前谢谢。

好的我尝试了以下内容,因为@StephenMuecke建议它起作用了:

    public ActionResult NewSale()
    {
        var list = new List<string>();
        list.Add("Cash");
        list.Add("Credit");
        list.Add("Promotion");

        ViewBag.typetransaction = new SelectList(list);
        return View(new OfficeSale());
    }

@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as SelectList, new { @class = "form-control" })

2 个答案:

答案 0 :(得分:0)

ViewBag.typetransaction as SelectList这让我很烦恼。

由于DropDownList帮助器期望第二个参数为IEnumerable(我相信您正在调用此构造函数https://msdn.microsoft.com/en-us/library/dd470380%28v=vs.118%29.aspx),因此您可能需要转换为IEnumerable<SelectListItem>

答案 1 :(得分:0)

您的问题是,在控制器中,您将ViewBag.typetransaction指定为IEnumerable<SelectListItem>的类型,但在视图中您尝试将其转换为SelectList类型,这会导致ViewBag.typetransaction成为null SelectList

IEnumerable<SelectListItem>SelectListMultiSelectList派生自IEnumerable<SelectListItem>,其源自IEnumerable<SelectListItem>),但SelectList 不是 ViewBag

有两个选项可以解决这个问题。首先,在视图中,将@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as IEnumerable<SelectListItem>, new { @class = "form-control" }) 属性强制转换为html帮助程序中的正确类型

SelectList

或者,在视图中,创建一个ViewBag.typetransaction = new SelectList(new List<string>() { "Cash", "Credit", "Promotion" }); ,例如

contactgrouping