c# - 为什么我的自定义 DisplayFor 模板实际上没有在此处呈现?

标签 c# asp.net-mvc asp.net-mvc-4 razor

我有一个模型:

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/

相关文章:

c# - mvc c# 中带有模型错误列表的一个属性

c# - 使用 Math.Round 转换特定对象类型的所有属性值?

c# - 创建更快的正则表达式 clr 函数

asp.net-mvc - 使用 ASP.NET MVC 的 TempData 和 Faked HttpContext 问题

c# - 找不到静态图像的 Controller 路径? asp.net mvc 路由问题?

asp.net-mvc-4 - StyleBundle 未渲染所有文件

c# - Asp.net MVC - 在 cshtml 页面中创建环境特定的元标记

c# - 如何在解决方案C#中获取另一个项目的绝对路径

c# - 替换特定字符之间的数据

c# - 通过 linq 选择组合组的前两个