【问题标题】:Display List in a View MVC在视图 MVC 中显示列表
【发布时间】:2015-05-11 13:26:55
【问题描述】:

我正在尝试显示我在视图中创建的列表,但不断收到:“传递到字典中的模型项的类型为 'System.Collections.Generic.List1[System.String]', but this dictionary requires a model item of type '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>
}

任何帮助将不胜感激:)

【问题讨论】:

  • 您要传递团队集合还是团队名称列表(这是您要传递的)?
  • 为什么一个足球队对象命名为Teams(复数),为什么一个球队有多个名字?我认为您需要仔细查看您的模型!
  • 在下面试试我的答案。您的模型未正确实施。

标签: c# asp.net-mvc list model-view-controller


【解决方案1】:

您的操作方法将模型类型视为List&lt;string&gt;。但是,在您看来,您正在等待IEnumerable&lt;Standings.Models.Teams&gt;。 您可以通过将视图中的模型更改为List&lt;string&gt; 来解决此问题。

但是,最好的方法是从您的操作方法中返回 IEnumerable&lt;Standings.Models.Teams&gt; 作为模型。那么您不必更改视图中的模型类型。

但是,我认为您的模型没有正确实现。我建议您将其更改为:

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&lt;string&gt;() {"Manchester United" }});Name 是一个集合)
  • @StephenMuecke OP 的模型有点不标准。谢谢,我已经更新了。
  • OP 模型完全没有意义 :) 我认为 Name 应该是 typeof string 而不是 List&lt;string&gt;
  • @StephenMuecke 完全同意,所以我更新了我的答案。
  • 谢谢@StephenMuecke
【解决方案2】:

您将错误的模式传递给您的视图。您的视图正在寻找 @model IEnumerable&lt;Standings.Models.Teams&gt; 并且您正在传递 var model = tm.Name.ToList(); 名单。您必须通过团队列表

你必须通过以下模型

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);

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多