如何在 ASP.Net MVC 中将列表对象显示到视图中?
Posted
技术标签:
【中文标题】如何在 ASP.Net MVC 中将列表对象显示到视图中?【英文标题】:How to display list object to a view in ASP.Net MVC? 【发布时间】:2019-05-07 07:20:01 【问题描述】:我很难将列表对象模型中的值显示到视图中。
我尝试使用此代码显示它
@model IEnumerable<MVC.Models.RootObject>
@foreach (var item in @Model)
<li>@item.records</li>
但是显示错误
传入字典的模型项的类型为“MVC.Models.RootObject”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[MVC.Models.RootObject]”的模型项。
这是我用来将数据从模型传递到视图的控制器
var transno = "ST-100420190001";
var client = new HttpClient();
var httpRequestMessage = new HttpRequestMessage
Method = HttpMethod.Get,
RequestUri = new Uri("https://myurl.com/" + transno),
Headers =
HttpRequestHeader.Accept.ToString(), "application/json" ,
HttpRequestHeader.ContentType.ToString(), "application/json",
"client-id", "client_id",
"client-secret","client_secret",
"partner-id","partner_id",
"X-Version", "1"
;
var response = client.SendAsync(httpRequestMessage).Result;
RootObject obj = JsonConvert.DeserializeObject<RootObject>(await
response.Content.ReadAsStringAsync());
return View(obj);
RootObject 模型如下所示
public class RootObject
public List<Record> records get; set;
public int totalRecords get; set;
那么Record模型是这样的
public class Record
public string transferId get; set;
public string type get; set;
public DateTime createdAt get; set;
public string dateUpdated get; set;
public string state get; set;
public string senderTransferId get; set;
【问题讨论】:
您的视图文件中的@model
行是什么?该错误表明它是IEnumerable<RootObject>
,但您传递的是一个RootObject
。
【参考方案1】:
好的,我们来看看错误信息
您的视图期望 IEnumerable
或 RootObject
,但您只是传入了一个 RootObject。
The model item passed into the dictionary is of type 'MVC.Models.RootObject', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MVC.Models.RootObject]'.
我不确定您的 API 正在回复什么,但您可能需要将 DeserializeObject
发送到 IEnumerable
或 RootObject
而不是单个对象。您是否尝试过调试这些行?
var response = client.SendAsync(httpRequestMessage).Result;
RootObject obj = JsonConvert.DeserializeObject<RootObject>(await response.Content.ReadAsStringAsync());
return View(obj);
如果不是这种情况,并且您希望在以后进行多次 API 调用以构建列表
这样的事情应该可以工作,但我建议您遵循上述内容,因为从您发布的剃须刀来看,这似乎更像您正在寻找的东西。
var response = client.SendAsync(httpRequestMessage).Result;
RootObject obj = JsonConvert.DeserializeObject<RootObject>(await
response.Content.ReadAsStringAsync());
IEnumerable<RootObject> list = new List<RootObject>() obj ;
return View(list);
【讨论】:
我的 api 返回的是一个“记录”对象列表,就像我的“记录”模型中显示的那样。您的第二个建议对我有用,但是可以进行多次 api 调用来构建列表吗?它不会减慢页面速度吗? @ikey 会减慢页面速度。您需要调用返回record
对象列表的端点,然后是 DeserializeObject
和 IEnumerable<RootObject>
【参考方案2】:
根据我的评论,您希望更改 @model
行并可能按如下方式充实循环。
@model MVC.Models.RootObject
@foreach (var item in @Model.records)
<li>@item.transferId</li>
<li>@item.type</li>
// etc
【讨论】:
我在使用您的代码建议后遇到了这个错误。 “IEnumerablerecords
任何值,所以它是空的
但是在我调试程序之后,我看到一个值被传递给了records
。也许这段代码是问题所在? IEnumerable<MVC.Models.RootObject>
@ikey 这听起来不像您正确更改了foreach
。您是否对其进行了编辑以循环通过 records
而不是模型? / 将视图模型从列表更改为单个模型
我在答案中添加了@model
行,它应该只是RootObject
而不是它们的集合。以上是关于如何在 ASP.Net MVC 中将列表对象显示到视图中?的主要内容,如果未能解决你的问题,请参考以下文章
您可以在asp.net mvc中将复杂对象从表单发布到控制器吗
无法在 asp.net mvc 4 中将 JSON 对象映射到 JqGrid