簡體   English   中英

MVC 顯示集合:InvalidCastException:無法將“Models.ConversionRate”類型的對象轉換為“System.Collections.IEnumerable”

[英]MVC displaying collection: InvalidCastException: Unable to cast object of type 'Models.ConversionRate' to type 'System.Collections.IEnumerable'

我有一個對象,我成功地將它傳遞給我的視圖,其中包含一個正確填充的集合。

我的模型。 convert_rates 只是雙打的集合:

public class Converter
{
    public string result { get; set; }
    public string documentation { get; set; }
    public string terms_of_use { get; set; }
    public string time_zone { get; set; }
    public string time_last_update { get; set; }
    public string time_next_update { get; set; }
    public ConversionRate conversion_rates { get; set; }
}

我的控制器。 currencyConverter 正確傳遞到我的觀點:

public class Rates
{
    public static Converter Import()
    {
        try
        {
            string URLString = "https://v6.exchangerate-api.com/v6/APIKey/latest/gbp";
            using (var webClient = new System.Net.WebClient())
            {
                var json = webClient.DownloadString(URLString);
                Converter Test = JsonConvert.DeserializeObject<Converter>(json);
                return Test;
            }
        }
        catch (Exception e)
        {
         ...
        }
    }
}


public IActionResult Index()
{
    var currencyConverter = Rates.Import();
    return View(currencyConverter);
}

我的觀點:

@using System.Collections;
@model Converter

@foreach (var currency in (IEnumerable)Model.conversion_rates)
{
<tr>
    <td>
        @currency
    </td>
</tr>
}

在調試器中,我可以看到 Model.conversion_rates 已正確填充,但我無法將每個單獨的元素存儲在我的 var 貨幣中以顯示在我的表中。

我可以訪問每個單獨的元素並通過執行以下操作來很好地顯示它們:

**@Successfully pulled data: @Model.conversion_rates.AED**

但由於許多原因,這並不實用。 可以動態添加新值等。所以我需要訪問我的 Converter.conversion_rates 中的數據,這是我需要訪問的集合。

這是我遇到的一個答案,但它給了我以下錯誤:

InvalidCastException:無法將“Models.ConversionRate”類型的對象轉換為“System.Collections.IEnumerable”類型。

我能找到的最值得注意的類似答案建議將我返回的模型本身轉換為 IEnumerable,但它不起作用。 我假設這是因為我只返回一個對象,而我想要訪問的實際集合在 Converter 對象本身內部,因此將 Converter 轉換為 1 的集合無濟於事。 此外,如果我這樣做,我也無法直接訪問 Model.conversion_rates。

@model IEnumerable<Converter>

@foreach (var currency in Model.conversion_rates)
{
<tr>
    <td>
        @currency
    </td>
</tr>
}

感謝任何建議。

編輯:所以我嘗試的早期修復似乎是正確的,我的模型更好:

public IEnumerable<ConversionRate> conversion_rates { get; set; }

但這弄亂了我的 json 反序列化。 如果我找到修復程序會更新。

最終代碼:

只需修復您的課程

public class Converter
{
    ......
    public ConversionRate conversion_rates { get; set; }
    public  IEnumerable<ConversionRateItem> ConversionRateItems { get; set; }
}

public class ConversionRateItem
{
public string Name {get; set;}
public double Value {get; set;}
}

和行動

 var currencyConverter = Rates.Import();

 var items = currencyConverter.conversion_rates.GetType()
        .GetProperties()
        .Select(p => new ConversionRateItem
        {
         Name=p.Name,
        Value = (double) p.GetValue(currencyConverter .conversion_rates, null)
        }).ToArray();

  converter.ConversionRateItems=items;
converter.conversion_rates=null;

    return View(currencyConverter);

最后查看

@foreach (var currency in Model.ConversionRateItems)
{
<tr>
    <td>
        @currency.Name
    </td>
 <td>
        @currency.Value
    </td>
</tr>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM