尝试在ASP.NET MVC视图中显示下拉列表时出错

时间:2015-03-11 06:51:21

标签: c# asp.net-mvc-4 html-helper

我的模型

中有以下代码
    [NoCache]
    public IEnumerable GatePassTypeList()
    {
        IDictionary<string, IEnumerable<SelectListItem>> gatePassTypelist = new Dictionary<string, IEnumerable<SelectListItem>>();
        List<SelectListItem> gatePassType = new List<SelectListItem>();
        var gatePassData = this.db.GatePassType.OrderBy(r => r.GatePassTypeName).Select(r => r).ToList();
        foreach (var item in gatePassData)
        {
            gatePassType.Add(new SelectListItem { Text = item.GatePassTypeName, Value = item.GatePassTypeID.ToString() });
        }

        gatePassTypelist.Add(string.Empty, gatePassType);
        return gatePassTypelist;
    }

在我的控制器中,我有以下操作

 [NoCache]
    public ActionResult GatePassList()
    {
        ViewBag.GatePassTypeList = this.myModel.GatePassTypeList();
        return this.View(this.gatePassEntryModel.GetAllGatePasses());
    }

最后在我的视图中,我有以下代码

<td>
@Html.DropDownList("ddlGatePassTypeList", ViewBag.GatePassTypeList as IDictionary<string, IEnumerable<SelectListItem>>, "[All]", new { @multiple = "multiple" })
</td>

我想要实现的是显示GatePass类型列表,但我视图中的上述行在我的Elmah错误日志中抛出以下消息。

  

&#39;&System.Web.Mvc.HtmlHelper GT;&#39;不包含&#39; DropDownList&#39;的定义和最好的扩展方法重载&#39; System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,string,System.Collections.Generic.IEnumerable,string,object)&#39;有一些无效的论点

1 个答案:

答案 0 :(得分:1)

我猜这里的问题是你没有从字典中取出元素,问题出在这一行

ViewBag.GatePassTypeList = this.myModel.GatePassTypeList();

因为这个this.myModel.GatePassTypeList()返回字典

它应该是,这不是完美的代码,但事情是你需要在将项目下载到下拉列表后传递选择列表

   [NoCache]
    public ActionResult GatePassList()
    {
        var dic = this.myModel.GatePassTypeList()
                     as IDictionary<string, IEnumerable<SelectListItem>;
        ViewBag.GatePassTypeList = dic["entrykey"] as List<SelectListItem>;
        return this.View(this.gatePassEntryModel.GetAllGatePasses());
    }

    @Html.DropDownList("Mobiledropdown2", ViewBag.GatePassTypeList as SelectList)