如何从Controller获取字典



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

HomeController.cs

public IActionResult Index()
{
Data d = new Data();
var getDic = d.getDictionary();
var Info = getDic["First"];
return View(Info);
}

Data.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);
}
}

您的"Data"对象引用是在您的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);
}

最新更新