Razor模板中的迭代模型无法呈现

时间:2011-09-19 20:22:00

标签: asp.net-mvc-3

尝试渲染集合并且它无声地输出任何内容。我在SO上搜索类似的问题,没有发现任何描述我的问题。

我绝对肯定收藏品不是空的。在控制器中进行调试,视图显示我设置的类型集合中的项目。

我尝试过这些方法,但都没有做任何事情。

@foreach (var item in Model.Messages)
{
    @Html.DisplayFor(msg => item.MessageBody)
}

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

这会将值呈现为预期

@foreach (var item in Model.Messages)
{
    @item.MessageBody
}

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

很奇怪,对我来说非常好:

型号:

public class MyViewModel
{
    public IEnumerable<Message> Messages { get; set; }
}

public class Message
{
    public string MessageBody { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel
        {
            Messages = Enumerable.Range(1, 10).Select(x => new Message
            {
                MessageBody = "message " + x
            })
        });
    }
}

查看:

@model MyViewModel

@foreach (var item in Model.Messages)
{
    <div>@Html.DisplayFor(msg => item.MessageBody)</div>
}

我怀疑你的Messages集合是空的还是什么。想不出另一个理性的解释,因为我无法重现你的问题,如我的回答所示。

作为旁注,我会使用显示模板来避免编写任何循环。因此,您的Index.cshtml视图变为:

@model MyViewModel

@Html.DisplayFor(x => x.Messages)

然后你编写一个相应的显示模板(~/Views/Shared/DisplayTemplates/Message.cshtml),它会自动为你视图模型的Messages集合的每个项目呈现:

@model Message

<div>@Html.DisplayFor(x => x.MessageBody)</div>