为什么 Razor Pages 脚手架对索引、详细信息和删除页面使用 HTML 帮助程序(而不是标记帮助程序)?

2023-12-26

我最近使用 Razor Pages 开始了我的第一个项目,我使用 EF Core 并将我的所有模型搭建到 CRUD Razor Pages 中。我注意到生成的创建和编辑 Razor 页面使用标签帮助程序来显示数据。 IE。

        <div class="form-group">
            <label asp-for="ViewModel.Name" class="control-label"></label>
            <input asp-for="ViewModel.Name" class="form-control" />
            <span asp-validation-for="ViewModel.Name" class="text-danger"></span>
        </div>

而索引、详细信息和删除页面则使用 Html 帮助程序来显示数据。 IE。

    <dt>
        @Html.DisplayNameFor(model => model.ViewModel.Name)
    </dt>
    <dd>
        @Html.DisplayFor(model => model.ViewModel.Name)
    </dd>

This link https://learn.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-2.2Microsoft 表示“标签帮助程序减少了 Razor 视图中 HTML 和 C# 之间的显式转换。在许多情况下,HTML 帮助程序为特定标签帮助程序提供了替代方法,但重要的是要认识到标签帮助程序不会取代 HTML 帮助程序,并且并不是每个 HTML Helper 都有一个 Tag Helper。”。

但当然,这些基本显示字段可以使用标签帮助程序来显示。在我看来,这是一个相当无聊的不一致,我认为最好主要使用标签帮助程序,仅在绝对必要时使用 Html 帮助程序。

我认为开发人员这样做是有原因的,但我不知道那是什么。有人可以帮我解释一下吗?


简单:没有用于显示的标签助手。

扩展:

对于输入之类的东西使用标签助手是有意义的:有与之相关的特定 HTML 标签。显示后事情变得更加模糊。每个开发人员可能希望使用不同的标签进行显示:span, strong, th, dt等等。这里没有一刀切的方法。您甚至可能根本不需要标签。默认情况下Html.DisplayFor and Html.DisplayNameFor仅输出值,不带任何标签。

此外,这些是模板化的帮助程序,这意味着您作为开发人员实际上可以将模板添加到Views\Shared\DisplayTemplates并自定义事物的显示方式。例如,您可以在String.cshtml查看那里,类似:

@model string
<strong>@Model</strong>

现在,使用显示的任何字符串属性Html.DisplayFor会被包裹在strong标签。使用标签助手无法实现这种级别的定制。

EDIT

FWIW,如果您确实想使用标签助手,您可以添加自己的标签助手。例如:

public class DisplayNameTagHelper : TagHelper
{
    public ModelExpression For { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "strong";
        output.Content.SetContent(For.Metadata.DisplayName);
    }
}

那么在你看来:

<display-name for="MyProperty" />

写一个DisplayTagHelper在概念上类似,但有点困难。您可以从中获取值For.Model。然而,这被输入为object。使用可用信息For.Metadata,您需要确定您实际正在使用的内容,并且可能有一些不同的分支来根据类型以不同的方式显示内容。还有For.Metadata.DataFormatString需要考虑小数、日期时间等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Razor Pages 脚手架对索引、详细信息和删除页面使用 HTML 帮助程序(而不是标记帮助程序)? 的相关文章

随机推荐

  • RESTful Web 服务和 HTTP 动词

    服务器应允许将 Web 服务归类为 RESTful 的最小 HTTP 动词集是什么 如果我的主机不允许怎么办PUT and DELETE 这真的很重要吗 我能从此过上幸福的生活吗 GET and POST Update 谢谢各位的解答 罗杰
  • 从 const 成员函数返回非常量引用

    为什么返回对指向的成员变量的引用有效 而另一个则无效 我知道一个const成员函数应该只返回const引用 但是为什么对于指针来说这似乎不正确呢 class MyClass private int a int b public MyClas
  • java.io.IOException:错误= 11

    我在使用 Java 时遇到了一个奇怪的问题ProcessBuilder 代码如下所示 稍微简化的形式 public class Whatever implements Runnable public void run someIdentif
  • 如何写入在 res/raw 中声明的文件中?

    我有一个文件存储在 res raw 中 我想知道如何写入该文件 我尝试了 getResources 但它返回一个 inputStream 不可能 如果您需要将资产复制到设备 请将文件存储在资产目录中 然后使用 AssetManager 流式
  • 如何通过改造发出 CURL 请求?

    我正在尝试登录 该请求看起来像这样 curl u username PASSWORD https urlhere com https urlhere com 我怎样才能使用改造使其发挥作用 我尝试了一个授权标头 例如 request add
  • 通过引用混淆赋值

    我有一个 交易 对象 其中包含对 orderBook BTCUSDT 的引用 我的目的是在 orderBook BTCUSDT 更改时更改 交易 但是 更改 orderBook BTCUSDT 不起作用 但更改 orderBook BTCU
  • 无法访问asp.net中的嵌入资源

    我正在尝试将图像和样式表从用户控件移动到程序集中的嵌入资源 我已使用 Reflector 来查看图像和 css 文件是否嵌入到程序集中 但是当我尝试使用 ClientScript GetWebResourceUrl 创建的 URL 访问它们
  • 如何在 Sequelize 的“BelongsTo”关联中设置外键的默认值或选项?

    我在续集方面遇到了一个看似常见的问题 对于上下文我试图分配一个默认值role每一个user即被创建 基本上每个user的角色应该设置为default user当他们第一次注册时 我希望能够像使用普通字段一样在模型文件中简单地定义此默认值 但
  • 对 Post 请求的两次调用:使用 http 204 和 200

    我已经在 net核心应用程序中实施了Cors策略 在Startup cs under ConfigureServices我添加了以下 cors 策略 services AddCors options gt options AddPolicy
  • QtWidgets 应用程序的虚拟键盘或屏幕键盘?

    我将部署qtvirtualkeyboard在我基于小部件的应用程序中 如下所示 include
  • 如何在 Rails 4.2 和 sqlite 中按星期几进行过滤?

    如何按一周中的每一天检索记录 这是我的范围 scope day of week gt day of week where created at day of week 我尝试过 strftime w day of week 和 DAYOFW
  • 以编程方式设置区域设置不起作用?

    我有一个活动 我以编程方式将区域设置设置为 de 但它没有按预期工作并显示手动设置的默认语言 英语文本 请帮忙 public void onCreate Bundle savedInstanceState super onCreate sa
  • 盲目使用 InvokeRequired 不是不好的做法吗?

    我是一名新手程序员 所以我在这里可能完全错误 但这个问题让我烦恼的程度超出了应有的范围 这实际上是后续this https stackoverflow com questions 747210 whats wrong with callin
  • Rails:如何在助手或控制器之外访问请求对象?

    In my application helper rb文件我有一个这样的函数 def internal request server name request env SERVER NAME plus more code end 控制器 模
  • 如何安装QPSQL驱动程序? [复制]

    这个问题在这里已经有答案了 我试图与我的PSQL数据库 但当我检查时 dbliste QtSql QSqlDatabase drivers print dbliste 我懂了 QSQLITE QODBC QODBC3 为什么我没有驱动程序Q
  • 如何更改“DivideByZeroException”的抛出处理?

    我想给int类似的行为float 即使其能够除以 0but我希望它返回0 此外 我想超载 运算符为int返回一个浮点数 我知道该怎么做 但只是为了完整性而提到 我不想检查每个除法的分母是否为 0 我也宁愿不等待抛出异常 因为异常速度很慢 理
  • 彩色框中的文本

    我正在创建一个简单的 HTML CSS 作品集网站 我正在努力寻找一种方法来按照图片中显示的方式设置以下文本的样式 值得注意的是 我已经取得了一些成果 但问题是这里的文本不是从左到右居中的 这更多的是随机排列 我不知道如何实现这一点 另请记
  • 注释不同 Symfony 2 / Doctrine 2

    这两者有什么区别 ORM ManyToOne targetEntity Category inversedBy products cascade remove ORM JoinColumn name category id referenc
  • Vim 和 Ruby - 匹配“do”和“end”?

    我相信我们都熟悉 意外的 kEnd 问题 对我来说 追踪它们总是很麻烦 因为 Vim 不匹配 do 和 end 显然 其他以 end 结尾的元素 例如 if 有没有办法配置 Vim 显示这些匹配项以帮助简化调试 如果您使用的是最新的 vim
  • 为什么 Razor Pages 脚手架对索引、详细信息和删除页面使用 HTML 帮助程序(而不是标记帮助程序)?

    我最近使用 Razor Pages 开始了我的第一个项目 我使用 EF Core 并将我的所有模型搭建到 CRUD Razor Pages 中 我注意到生成的创建和编辑 Razor 页面使用标签帮助程序来显示数据 IE div class