我在Controller中定义并初始化了一个字典:
Dictionary<string,int> injuryValues = new Dictionary<string,int>();
int i = 1;
foreach (var tmpRec in allRecords)
{
if (!injuryValues.ContainsKey(tmpRec.INJURY))
{
injuryValues.Add(tmpRec.INJURY, ++i);
}
}
ViewData["InjuryDictionary"] = injuryValues;
我想在我的视图中访问此词典。我知道传递这些数据的理想方法是通过ViewModel,但是对于这个实例,我需要在ViewData容器中传递这个字典。我怎么能这样做,以便在我的视图中我可以访问这本词典?
例如,在我的视图中,使用以下行的字典:
%>
Dictionary injuryList = ViewData["InjuryDictionary"] as Dictionary<string,int>;
<%
在View作为View Data容器中访问它的正确语法是什么?出于我的目的,我没有使用视图模型,但我知道这是一个理想的选择。
答案 0 :(得分:2)
您是否尝试过更换&#34; Dictionary&#34;用&#34; var&#34;?
var injuryList = ViewData["InjuryDictionary"] as Dictionary<string,int>;
答案 1 :(得分:2)
原因是您正在定义字典而不填充其泛型类型。
如上所述,您可以使用var,但为了帮助您更好地理解它,您可以执行类似
的操作Dictionary<string,int> injuryList = ViewData["InjuryDictionary"] as Dictionary<string, int>;
或
var injuryList = ViewData["InjuryDictionary"] as Dictionary<string, int>;
注意:进行了以下测试,因为我在上面看到您的评论,说明它返回了错误。我的工作正常。这是我的控制器
public class HomeController : Controller
{
public ActionResult Index()
{
var injuryValues = new Dictionary<string, int>();
injuryValues.Add("test", 1);
injuryValues.Add("test2", 2);
ViewData["InjuryDictionary"] = injuryValues;
return View();
}
}
和我的观点
<%
Dictionary<string, int> injuryList = ViewData["InjuryDictionary"] as Dictionary<string, int>;
//var injuryList = ViewData["InjuryDictionary"] as Dictionary<string, int>;
%>
<%:injuryList.First().Key%>
<%:injuryList.First().Value%>