我有一个模型:

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>

最佳答案

@戴很近。 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/

10-09 22:51