在MVC视图中显示列表

17
我想在视图中显示我创建的列表,但一直收到以下错误信息:“将传递到字典中的模型项的类型为'System.Collections.Generic.List1[System.String]',但此字典需要类型为'System.Collections.Generic.IEnumerable1[Standings.Models.Teams]'的模型项。”
我的控制器:
public class HomeController : Controller
{
    Teams tm = new Teams();

    public ActionResult Index()
    {
        var model = tm.Name.ToList();

        model.Add("Manchester United");
        model.Add("Chelsea");
        model.Add("Manchester City");
        model.Add("Arsenal");
        model.Add("Liverpool");
        model.Add("Tottenham");

        return View(model);
    }

我的模型:

public class Teams
{
    public int Position { get; set; }
    public string HomeGround {get; set;}
    public string NickName {get; set;}
    public int Founded { get; set; }

    public List<string> Name = new List<string>();
}

我的观点:

@model IEnumerable<Standings.Models.Teams>

@{
ViewBag.Title = "Standings";
}

@foreach (var item in Model)
{
    <div>
        @item.Name
        <hr />
    </div>
}

非常感谢您的任何帮助 :)


1
你想传递一个团队的集合还是一个团队名称的列表(这是你正在传递的内容)? - user3559349
1
为什么一个足球队的对象被命名为Teams(复数形式),而且为什么一个队伍会有多个名称?我认为你需要仔细检查你的模型! - user3559349
尝试使用我下面的答案。您的模型实现不正确。 - Farhad Jabiyev
2个回答

31

你的操作方法将模型类型视为List<string>。但是,在你的视图中,你正在等待IEnumerable<Standings.Models.Teams>

你可以通过将视图中的模型更改为List<string>来解决这个问题。

但是,最好的方法是从你的操作方法中返回IEnumerable<Standings.Models.Teams>作为一个模型。这样你就不必在视图中更改模型类型。

但是,我认为你的模型实现有误。建议你将其更改为:

public class Team
{
    public int Position { get; set; }
    public string HomeGround {get; set;}
    public string NickName {get; set;}
    public int Founded { get; set; }
    public string Name { get; set; }
}

然后您必须更改您的操作方法如下:

public ActionResult Index()
{
    var model = new List<Team>();

    model.Add(new Team { Name = "MU"});
    model.Add(new Team { Name = "Chelsea"});
    ...

    return View(model);
}

同时,请分享一下您的观点:

@model IEnumerable<Standings.Models.Team>

@{
     ViewBag.Title = "Standings";
}

@foreach (var item in Model)
{
    <div>
        @item.Name
        <hr />
    </div>
}

它需要是 model.Add(new Team() { Name = new List<string>() {"Manchester United" }}); (Name 是一个集合)。 - user3559349
@StephenMuecke OP的模型有点不符合标准。谢谢,我已经更新了。 - Farhad Jabiyev
1
OP模型完全没有意义 :) 我认为Name应该是string类型,而不是List<string> - user3559349
@StephenMuecke 完全同意,所以我更新了我的答案。 - Farhad Jabiyev
谢谢@StephenMuecke - FiF4M33sTeR
@FiF4M33sTeR 很高兴能帮忙。 - Farhad Jabiyev

0

您正在向视图传递错误的模式。您的视图正在寻找@model IEnumerable<Standings.Models.Teams>,而您正在传递var model = tm.Name.ToList();名称列表。您必须传递Teams列表。

您必须传递以下模型

var model = new List<Teams>();

model.Add(new Teams { Name =  new List<string>(){"Sky","ABC"}});
model.Add(new Teams { Name =  new List<string>(){"John","XYZ"} });
return View(model);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接