为什么我的自定义 DisplayFor 模板实际上没有在这里呈现

本文关键字:在这里 实际上 我的 自定义 DisplayFor 为什么 | 更新日期: 2023-09-27 18:33:29

我有一个模型:

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>

为什么我的自定义 DisplayFor 模板实际上没有在这里呈现

@Dai很接近。 不应将 Response.Write 用于此目的。 您需要前面的 @ 符号来告诉 Razor 返回的值应该呈现到页面中。

这应该有效:

@foreach (var p in Model.Popular) {
    @Html.DisplayFor(m => p);
}

在我在其他项目中的测试中,如果您所做的只是显示 IEnumerable 的所有成员(列表、数组等(,您甚至不应该真正需要循环。

@Html.DisplayFor(m => m.Popular);

为我工作。

DisplayFor返回MvcHtmlString的实例,它实际上并没有向响应流写入任何内容。

你会想要这个:

@foreach (var p in Model.Popular) {
    Response.Write( Html.DisplayFor(m => p) );
}