无法从控制器传递列表以查看

问题描述

我正在尝试将值列表从控制器传递到视图,但显然我遇到了无法传递列表的问题。我已经尝试过传递一个值,它没有问题。但是当我尝试传递列表时,它显示以下错误 -

传入字典的模型项是类型 '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>
       }