作为ViewData从字典传递数据

本文关键字:数据 字典 ViewData 作为 | 更新日期: 2023-09-27 18:15:36

我已经在控制器中定义并初始化了一个字典:

  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>; 
<%

什么是正确的语法,我访问这在视图作为一个视图数据容器?出于我的目的,我不使用视图模型,尽管我知道这是一个理想的选择。

作为ViewData从字典传递数据

原因是您在定义字典时没有填充它的泛型类型。

如前所述,您可以使用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();
    }
}

and my 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%>

你试过用"var"替换"Dictionary"吗?

var injuryList = ViewData["InjuryDictionary"] as Dictionary<string,int>;