为什么我的自定义 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>
@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) );
}