我有一个模特:
public class PostModel
{
public int PostId { get; set; }
[Required]
[Display(Name = "Title")]
public string Title { get; set; }
[Required]
[Display(Name = "Idea")]
[DataType(DataType.MultilineText)]
public string Body { get; set; }
[Required]
public int UserId { get; set; }
public string UserName { get; set; }
}
我已在/Shared/DisplayTemplates/PostModel.ascx
为其创建了自定义显示。然后,我在Home/Index
视图中显示这些列表:
@foreach (var p in Model.Popular)
{
Html.DisplayFor(m => p);
}
当单步浏览视图时,如果我进入 Html.DisplayFor
,我会进入/Shared/DisplayTemplates/PostModel.ascx
并按预期处理。但是,它实际上从未被渲染过。
我错过了什么?
以下是模板:
<%@ Control Language="C#"
AutoEventWireup="true"
CodeBehind="PostModel.ascx.cs"
Inherits="System.Web.Mvc.ViewUserControl<TPB.Models.PostModel>" %>
<div class="rounded-border">
<h2><%= Html.DisplayTextFor(m => m.Title) %></h2>
<p><%= Html.DisplayTextFor(m => m.Body) %></p>
</div>
答案 0 :(得分:4)
这应该有效:
@foreach (var p in Model.Popular) {
@Html.DisplayFor(m => p);
}
在我在其他项目中的测试中,如果您所做的只是显示IEnumerable(列表,数组等)的所有成员,您甚至不应该真正需要循环。
@Html.DisplayFor(m => m.Popular);
对我有用。
答案 1 :(得分:0)
DisplayFor
返回MvcHtmlString
的实例,它实际上并没有向响应流写入任何内容。
你会想要这个:
@foreach (var p in Model.Popular) {
Response.Write( Html.DisplayFor(m => p) );
}