问题描述
我正在尝试将值列表从控制器传递到视图,但显然我遇到了无法传递列表的问题。我已经尝试过传递一个值,它没有问题。但是当我尝试传递列表时,它显示以下错误 -
传入字典的模型项是类型 'System.Collections.Generic.List`1[vidly.Models.pelanggan]',但是这个 字典需要一个“vidly.models.pelanggan”类型的模型项。
我有这个模型 -
public class pelanggan
{
public string Nama { get; set; }
}
控制器代码-
// GET: Pelanggan
public ActionResult Index()
{
var name = new List<pelanggan> {
new pelanggan {Nama = "Paidi" },new pelanggan {Nama = "Budi" }
};
return View(name);
}
这是我的视图文件
@model vidly.Models.pelanggan
@{
ViewBag.Title = "index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Customer</h2>
@foreach(var Nama in Model.pelanggan)
{
<li>@Nama.Nama</li>
}
我已经尝试创建一个 viewmodel
但它也显示相同的错误。你能指出错误在哪里吗?
解决方法
您正在从控制器返回一个 List<T>
。因此,在您的视图中声明的模型应该能够接收一个列表并对其进行迭代。
将视图文件中的模型声明替换为以下内容 -
@using vidly.Models;
@model IEnumerable<pelanggan>
然后你可以像-
一样迭代/循环模型@foreach(var p in Model) // p represents a "pelanggan" object in the list
{
<li>@p.Nama</li>
}
,
问题在于您返回的内容 return View(name);
与视图所期望的内容 @model vidly.Models.pelanggan
之间的类型不匹配您可以更改为 @model List<vidly.Models.pelanggan>
但我想说的是:
public class pelanggan
{
public List<string> Namas { get; set; }
}
然后
public ActionResult Index()
{
var model = new pelanggan {
name = new List<string> {
"Paidi","Budi"
}
};
return View(model);
}
最后在你看来
@foreach(var Nama in Model.Namas)
{
<li>@Nama</li>
}