无法获取要在页面上显示的模型字段

时间:2017-11-12 15:51:01

标签: c# asp.net asp.net-mvc

我正在使用这个模型:

 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());

2 个答案:

答案 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的集合。因此,您的外部循环应该是0Model.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>
        }
    }
}