将字典中的数据作为ViewData传递

时间:2014-07-30 18:44:00

标签: c# dictionary

我在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容器中访问它的正确语法是什么?出于我的目的,我没有使用视图模型,但我知道这是一个理想的选择。

2 个答案:

答案 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%>