【问题标题】:Error trying to display a dropdownlist in ASP.NET MVC view尝试在 ASP.NET MVC 视图中显示下拉列表时出错
【发布时间】:2015-03-11 06:51:20
【问题描述】:

我的模型

中有以下代码
    [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 错误日志中抛出以下消息。

'System.Web.Mvc.HtmlHelper>' 不包含 'DropDownList' 的定义和最佳扩展方法重载 'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string , System.Collections.Generic.IEnumerable, string, object)' 有一些无效参数

【问题讨论】:

  • 第二个参数是IEnumerable&lt;SelectListItem&gt;SelectList 不是Dictionary&lt;TKey,TValue&gt;
  • DropDownList 的第二个参数需要是IEnumerable&lt;SelectListItem&gt; 而不是字典(如果要多选,请使用ListBoxFor()

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


【解决方案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)  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多