C# 试图将模型传递给视图,但出现异常

C# 试图将模型传递给视图,但出现异常,c#,asp.net-mvc,view,C#,Asp.net Mvc,View,我的问题 我是新来的,我需要一些帮助,除了下面的例外。我反序列化了一个JSON数组,根据我所做的所有阅读,我相信我正在将模型传递给视图 通过阅读异常,我可以推断models.Rootobject和models.Survey之间存在某种不匹配 我曾尝试将Rootboject转换为一个列表,但这会生成一个不同的异常,我认为这将解决IEnumerable问题 所以我认为我有两个问题,我认为我的模型由于某种原因不匹配,但是视图需要一个列表,而我没有提供一个列表。值得注意的是,我从模型中自动生成的视图 A

我的问题

我是新来的,我需要一些帮助,除了下面的例外。我反序列化了一个JSON数组,根据我所做的所有阅读,我相信我正在将模型传递给视图

通过阅读异常,我可以推断models.Rootobject和models.Survey之间存在某种不匹配

我曾尝试将Rootboject转换为一个列表,但这会生成一个不同的异常,我认为这将解决IEnumerable问题

所以我认为我有两个问题,我认为我的模型由于某种原因不匹配,但是视图需要一个列表,而我没有提供一个列表。值得注意的是,我从模型中自动生成的视图

An unhandled exception occurred while processing the request.
InvalidOperationException: The model item passed into the ViewDataDictionary 
is of type 'AgeCareTech.Models.Rootobject', but this ViewDataDictionary 
instance requires a model item of type 
'System.Collections.Generic.IEnumerable`1[AgeCareTech.Models.Survey]'.
型号

namespace AgeCareTech.Models
{
public class Rootobject
{
    [JsonProperty("surveys")]
    public Survey[] surveys { get; set; }
}

public class Survey
{
    [JsonProperty("survey_id")]
    public int survey_id { get; set; }

    [JsonProperty("title")]
    public string title { get; set; }

    [JsonProperty("created_on")]
    public DateTime created_on { get; set; }

    [JsonProperty("number_of_questions")]
    public int number_of_questions { get; set; }

    [JsonProperty("number_of_responses")]
    public int number_of_responses { get; set; }
}

}
查看

@model IEnumerable<AgeCareTech.Models.Survey>

@{
    ViewData["Title"] = "Index";
}

<h2>Index</h2>

<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.created_on)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.number_of_questions)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.number_of_responses)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.created_on)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.number_of_questions)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.number_of_responses)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.survey_id">Edit</a> |
                <a asp-action="Details" asp-route-id="@item.survey_id">Details</a> |
                <a asp-action="Delete" asp-route-id="@item.survey_id">Delete</a>
            </td>
        </tr>
}
    </tbody>
</table>
@model IEnumerable
@{
ViewData[“标题”]=“索引”;
}
指数

创造新的

@DisplayNameFor(model=>model.title) @DisplayNameFor(model=>model.created\u on) @DisplayNameFor(model=>model.number\u问题) @DisplayNameFor(model=>model.number\u响应) @foreach(模型中的var项目){ @DisplayFor(modeleItem=>item.title) @DisplayFor(modelItem=>item.created\u on) @DisplayFor(modelItem=>item.number of_问题) @DisplayFor(modelItem=>item.number\u响应) 编辑| 细节| 删除 }
控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;
using AgeCareTech.Models;

namespace AgeCareTech.Controllers
{
    public class SurveyHeroSurveyController : Controller
    {
        public async Task<IActionResult> Index()
        {
            string uri = "http://www.mocky.io/v2/5bcb430c2f0000730075beb1";

            Rootobject SurveyHeroInfo = new Rootobject();

            using (HttpClient SurveyHeroAPI = new HttpClient())
            {
                SurveyHeroAPI.BaseAddress = new Uri(uri);
                SurveyHeroAPI.DefaultRequestHeaders.Clear();
                SurveyHeroAPI.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage Response = await SurveyHeroAPI.GetAsync(uri, HttpCompletionOption.ResponseContentRead);

                if (Response.IsSuccessStatusCode)
                {
                    var SurveyHeroResponse = Response.Content.ReadAsStringAsync().Result;

                    SurveyHeroInfo = JsonConvert.DeserializeObject<Rootobject>(SurveyHeroResponse);
                }
            }

            return View(SurveyHeroInfo);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用Newtonsoft.Json;
使用System.Net.Http;
使用System.Net.Http.Header;
使用AgeCareTech.模型;
名称空间AgeCareTech.Controllers
{
公共类SurveyHeroSurveyController:控制器
{
公共异步任务索引()
{
字符串uri=”http://www.mocky.io/v2/5bcb430c2f0000730075beb1";
Rootobject SurveyHeroInfo=新的Rootobject();
使用(HttpClient SurveyHeroAPI=new-HttpClient())
{
SurveyHeroAPI.BaseAddress=新Uri(Uri);
SurveyHeroAPI.DefaultRequestHeaders.Clear();
SurveyHeroAPI.DefaultRequestHeaders.Accept.Add(新MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage Response=await SurveyHeroAPI.GetAsync(uri,HttpCompletionOption.ResponseContentRead);
if(响应。IsSuccessStatusCode)
{
var surveyherosponse=Response.Content.ReadAsStringAsync().Result;
SurveyHeroInfo=JsonConvert.DeserializeObject(SurveyHeroResponse);
}
}
返回视图(SurveyHeroInfo);
}
}
}

您告诉视图希望:

@model IEnumerable<AgeCareTech.Models.Survey>

消息很清楚-视图需要类型为
IEnumerable
的模型,但您正在发送
AgeCareTech.Models.Rootobject
。因此,与其

return View(SurveyHeroInfo);
试一试


或者,另一种选择是,按照@kaffekopp的建议更改视图的模型。非常感谢,我真不敢相信我离得有多近!我投了票,但因为我的声誉还不够高,所以现在还没有显示出增加。AK785没有问题,请考虑我的回答,如果你真的帮了我的忙,就把它标记为答案,直到我的声誉高涨,它才会出现。enough@AK785对不起,我没意识到你没有足够的声望去投票。你可以把它标记为回答谢谢,我在返回的视图中添加了调查。我是如此接近:)
return View(SurveyHeroInfo);
return View(SurveyHeroInfo.surveys);