我正在使用这个模型:
public class ListCoins
{
public Dictionary<string,Dictionary<string,float>> listCoins{ get; set; }
}
当我尝试使用此方法在视图中显示它们时:
model IEnumerable<Crytocurrency_Web___Main.JResult.ListCoins>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<h4>Coin Value: @ViewBag.WalletValue</h4>
<table class="table">
<tr>
<th>
@Html.DisplayName("Name"))
</th>
<th>
@Html.DisplayName("CoinValue")
</th>
<th>
@Html.DisplayName("CoinAmmount")
</th>
<th></th>
</tr>
@for (var i = 0; i < Model.ElementAt(i).listCoins.Count; i++)
{
foreach (var coin in Model.ElementAt(i).listCoins)
{
<p>@coin.Key + " " + @coin.Value)</p>
}
}
我收到了错误:
@for (var i = 0; i < Model.ElementAt(i).listCoins.Count; i++)
但是在控制器中我检查了计数超过一个:
int counter = listOfCoins.Count;
等于四,所有数据都在那里。
我可能只是错误地显示它们但我无法弄明白
控制器代码:
List<ListCoins> newListCoins = new List<ListCoins>();
foreach (var coin in listOfCoins)
{
using (WebClient client = new WebClient())
{
var json = client.DownloadString(
"https://min-api.cryptocompare.com/data/pricemulti?fsyms=" + queryString + "&tsyms=" +
queryString);
var result = Newtonsoft.Json.JsonConvert
.DeserializeObject<Dictionary<string, Dictionary<string, float>>>(json);
newListCoins.Add(new ListCoins
{
listCoins = result,
});
}
}
return View(newListCoins.ToList());
答案 0 :(得分:0)
我认为你不需要使用:Model.ElementAt(i)。你可以这样做:
@for (var i = 0; i < Model.listCoins.Count; i++)
而不是:
@for (var i = 0; i < Model.ElementAt(i).listCoins.Count; i++)
然后,您可以循环遍历listCoins中的所有元素,并在视图中显示值。
答案 1 :(得分:0)
您正在获取ArgumentOutOfRangeException
,因为您尝试使用不存在的索引访问集合中的项目!
这部分在你的for循环中
i < Model.ElementAt(i).listCoins.Count
您正在尝试循环直到n,其中n是每个项目的子属性listCoins
的计数。
您的观点被强烈输入ListCoins
的集合。因此,您的外部循环应该是0
到Model.Count
@for (var i = 0; i < Model.Count; i++)
{
foreach (var coin in Model.ElementAt(i).listCoins)
{
<p>@coin.Key + " " + @coin.Value)</p>
}
}
此处,coin.Value
又是另一个字典(Dictionary<string,float>
),因此您可能也希望遍历其中的项目。
我认为foreach
版本可以更具可读性。
@foreach (var item in Model)
{
foreach (var coin in item.listCoins)
{
<h1>@coin.Key</h1>
foreach (var v in coin.Value)
{
<p>@v.Key - @v.Value</p>
}
}
}