【问题标题】:Why Does Html.DisplayForModel() display only one item from list?为什么 Html.DisplayForModel() 只显示列表中的一项?
【发布时间】:2014-03-19 14:19:33
【问题描述】:

我想使用 Html.DisplayModelFor() 在视图中显示项目列表。

这里是控制器:

public ActionResult Index() {

        var person = new ApplicationUser();
        person.Email = "Greg@gmail.com";
        person.UserName = "Greg";

        var person2 = new ApplicationUser();
        person.Email = "Gary@gmail.com";
        person.UserName = "Gary";

        var list = new List<ApplicationUser>();
        list.Add(person);
        list.Add(person2);

        return View(list);
    }

这里是视图:

@model  IEnumerable<WebApplication32.Models.ApplicationUser>


@Html.DisplayForModel()

这是名为 ApplicationUser 的 DisplayTemplate:

@model WebApplication32.Models.ApplicationUser
<div>
  @Html.DisplayFor(u=> u.UserName)
  @Html.DisplayFor(u=> u.Email)
</div>

结果只是显示的第一项。

如果我将视图更改为:

@model  IEnumerable<WebApplication32.Models.ApplicationUser>

@foreach (var item in Model)
{
    @Html.DisplayFor(x => x)
}

然后显示每个项目。

但第二种观点对我来说毫无意义:在 foreach 中,似乎没有使用“item”。然而它正在循环遍历这些项目。

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-5.1


【解决方案1】:

DisplayFor 需要一个表达式来标识包含要显示的属性的对象。 HtmlHelper (=@Html) 已经给出了模型。因此你不需要使用你的 item 变量。

【讨论】:

    【解决方案2】:

    为什么不使用模型本身:

    @foreach (var item in Model)
    {
        <label>@item.UserName</label>
        <label>@item.Email</label>
    }
    

    或者可以使用

    @foreach (var item in Model)
    {
        @Html.Display(item.UserName)
    }
    

    【讨论】:

    • 因为实际页面有许多不同的集合,我希望能够为每个集合使用 DisplayTemplate/EditTemplate。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2021-05-18
    • 2010-10-23
    相关资源
    最近更新 更多