首页 > 解决方案 > 如何从控制器中获取字典?

问题描述

我有三个班。第一个类调用Data 类的AddInfo 方法。然后 Data 类实例化字典。最后,控制器类调用 getDictionary 方法。它给了我一个错误:KeyNotFoundException:字典中不存在给定的键“信息”。

家庭控制器.cs

public IActionResult Index()
{
    Data d = new Data();
    var getDic = d.getDictionary();

    var Info = getDic["First"];

    return View(Info);
}

数据.cs

public interface IData 
{
     Dictionary<string, object> getDictionary();
     void AddInfo(string infoName, TheObject obj);
}

public class Data : IData 
{
    public Dictionary<string, object> infoList;

    public Data()
    {
        infoList = new Dictionary<string, object>();
    }

    public Dictionary<string, object> getDictionary()
    {
        return this.infoList;
    }

    public void AddInfo(string infoName, TheObject obj)
    {
        infoList.Add(infoName, obj);
    }
}

标签: c#asp.net-mvcdictionaryasp.net-core

解决方案


您的“数据”对象引用是在您的 HomeController 类中的这一行中创建的:

Data d = new Data();

然后几乎立即在您尝试在以下行访问它:

var Info = getDic["First"];

您绝不会打电话d.AddInfo("first", testObject)或做任何类似的事情。
如果您在其他地方有另一个 Data 类的实例,请记住它们是两个完全独立的对象,因此不共享同一个字典。

如果您在更高的其他地方创建了 Data 类的实例,那么可能的解决方案可能是您需要将其传递给 Index 方法,如下所示:

public IActionResult Index(IData d)
{
    var getDic = d.getDictionary();

    var Info = getDic["First"];

    return View(Info);
}

推荐阅读