You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Dictionary创建SelectList后视图调用报错:不存在‘Key’属性

问题分析与解决

嘿,这个问题其实是因为你在重复包装SelectList的时候搞错了数据源的属性名~

咱们一步步拆解:

  1. 你在控制器里已经把Dictionary<string, long>转换成了SelectList并赋值给ViewBag.act_type。这时候ViewBag.act_type里的每一项都是SelectListItem对象,它们的属性是Text(对应字典的Key)和Value(对应字典的Value),而不是原来字典的Key和Value。
  2. 但你在视图里又写了new SelectList(ViewBag.act_type, "Value","Key"),这相当于告诉程序去遍历SelectListItem集合,找名为Key的属性——可SelectListItem根本没有这个属性,所以就报错啦!

两种正确的做法

做法一:控制器转好SelectList,视图直接用

控制器代码:

// 1. 创建并填充字典
Dictionary<string, long> actlist = new Dictionary<string, long>();
actlist.Add("线下讲座", 1);
actlist.Add("线上直播", 2);
actlist.Add("研讨会", 3);

// 2. 直接转成SelectList存入ViewBag,指定Value和Text对应字典的键值
ViewBag.act_type = new SelectList(actlist, "Value", "Key");

视图代码:

// 直接使用已有的SelectList,不用再重新包装
@Html.DropDownList("acttype", ViewBag.act_type as SelectList, "请选择活动类型")

做法二:控制器存字典,视图再转SelectList

如果你想在视图里控制转换逻辑,那控制器里直接存原始字典就行:
控制器代码:

Dictionary<string, long> actlist = new Dictionary<string, long>();
actlist.Add("线下讲座", 1);
actlist.Add("线上直播", 2);
actlist.Add("研讨会", 3);

// 直接把字典存入ViewBag
ViewBag.act_type = actlist;

视图代码:

// 此时数据源是字典,所以可以指定"Value"和"Key"
@Html.DropDownList("acttype", new SelectList(ViewBag.act_type, "Value", "Key"), "请选择活动类型")

这样就能避免那个属性找不到的错误啦~

内容的提问来源于stack exchange,提问作者Sachu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:20:37