我有一个模型:
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
View 中显示这些列表:
@foreach (var p in Model.Popular)
{
Html.DisplayFor(m => p);
}
单步执行 View 时,如果我进入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>
最佳答案
@Dai 很接近。 Response.Write 不应用于此目的。您需要在前面加上 @ 符号来告诉 Razor 应该将返回值呈现到页面中。
这应该有效:
@foreach (var p in Model.Popular) {
@Html.DisplayFor(m => p);
}
在我对其他项目的测试中,如果您所做的只是显示 IEnumerable 的所有成员(列表、数组等),您甚至不需要真正的循环。
@Html.DisplayFor(m => m.Popular);
对我有用。
关于c# - 为什么我的自定义 DisplayFor 模板实际上没有在此处呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19129823/