我正在创建一个元素周期表,并且已经在Home Controller中创建了一个字典,名为dictionaryOfElements,该字典具有元素的原子序数作为键和元素的原子序数,符号,名称和权重作为值。在从ViewModel到View的视图中显示字典的所有值时,我需要帮助。
下面是我创建的模型:
public class Elements
{
public int AtomicNumber { get; set; }
public string Symbol { get; set; }
public string Name { get; set; }
public string Weight { get; set; }
public Elements()
{
//
}
public Elements(int atomic, string sym, string name, string weight)
{
this.AtomicNumber = atomic;
this.Symbol = sym;
this.Name = name;
this.Weight = weight;
}
}
我在其中声明字典的Home Controller
public class HomeController : Controller
{
Elements Hydrogen = new Elements(1, "H", "Hydrogen", "1.008");
Elements Helium = new Elements(2, "He", "Helium", "4.0026");
Elements Lithium = new Elements(3, "Li", "Lithium", "6.94");
Elements Beryllium = new Elements(4, "Be", "Beryllium", "9.0122");
Dictionary<int, Elements> dictionaryOfElements = new Dictionary<int, Elements>();
// GET: Home
public ActionResult DisplayElements()
{
dictionaryOfElements.Add(Hydrogen.AtomicNumber, Hydrogen);
dictionaryOfElements.Add(Helium.AtomicNumber, Helium);
dictionaryOfElements.Add(Lithium.AtomicNumber, Lithium);
dictionaryOfElements.Add(Beryllium.AtomicNumber, Beryllium);
return View(dictionaryOfElements);
}
public ActionResult Index()
{
return View();
}
}
视图的视图模型
public class ElementsOfPeriodicTable
{
public Elements elements { get; set; }
public Dictionary<int, Elements> dictionaryOfElements { get; set; }
}
到目前为止,这是我的视图的样子
@model PeriodicTable.View_Model.ElementsOfPeriodicTable
@{
ViewBag.Title = "DisplayElements";
Layout = "~/Views/Shared/_LayoutPage1.cshtml";
}
<h2>DisplayElements</h2>
@{
foreach (var item in Model.dictionaryOfElements)
{
<p>
Atomic Number:
Symbol:
Name:
Weight:
</p>
}
}
I want to be able to loop through the dictionary and print all the elements.
<p>
Atomic Number:@item.AtomicNumber
Symbol: @item.Symbol
Name: @item.Name
Weight: @item.Weight
</p>
以下循环对我不起作用。
foreach(KeyValuePair<int, Elements> elementKeyValuePair in ictionaryOfElements)
{
}
此外,如果我只想按字典键搜索,如何显示所有值?例如,我希望能够执行以下操作:
Elements element = dictionaryOfElements[4];
最后,我将添加元素周期表中的所有118个元素。这是最好的方法吗?
答案 0 :(得分:0)
首先,您应该从控制器返回ElementsOfPeriodicTable对象:
public ActionResult DisplayElements()
{
dictionaryOfElements.Add(Hydrogen.AtomicNumber, Hydrogen);
dictionaryOfElements.Add(Helium.AtomicNumber, Helium);
dictionaryOfElements.Add(Lithium.AtomicNumber, Lithium);
dictionaryOfElements.Add(Beryllium.AtomicNumber, Beryllium);
return View(new ElementsOfPeriodicTable{
dictionaryOfElements=dictionaryOfElements
}
);
}
如果您这样做,我认为foreach循环会起作用:
foreach(KeyValuePair<int, Elements> elementKeyValuePair in ictionaryOfElements)
{
}
答案 1 :(得分:0)
foreach (KeyValuePair<int, Elements> item in dictionaryOfElements)
将遍历字典中的每个KeyValuePair
,因此,在HTML中,您可以执行以下操作:
@foreach(KeyValuePair<int, Elements> item in dictionaryOfElements)
{
<p>
Atomic Number:item.AtomicNumber
Symbol: item.Symbol
Name: item.Name
Weight: item.Weight
</p>
}
为了检索特定项目,您可以使用键GetGetValue,它会尝试根据键检索值。根据密钥是否存在,该方法将返回true或false。除非您的密钥为空,否则没有例外。
在HTML中说了这一点,您可以执行以下操作:
@{
Elements item = new Elements();
if (dictionaryOfElements.TryGetValue(4, out item))
{
<p>
item.AtomicNumber
item.Symbol
item.Name
item.Weight
</p>
}
};
注意,您可能需要在HTML的开头指定@using元素。
最后回答您一个问题,是的,这似乎是个好方法。我唯一的建议是创建一个与Model Elements具有相同结构的ViewModel类ElementViewModel。
ViewModel将用于将数据从控制器传递到视图。简而言之,模型可以定义您的数据结构,如果可以的话-它可以反映数据库或数据的表示方式。
另一方面,viewModel是您将传递给View的数据结构。
在您的示例中-也许-这样做没有优势,但是我认为学习正确的结构将有助于您学习C Sharp。