我应该在 C# mvc 中使用 DisplayNameFor 方法还是避免使用它

本文关键字:方法 DisplayNameFor mvc 我应该 | 更新日期: 2023-09-27 18:32:15

在自动生成的视图中,我可以看到几行,如下所示:

<table>
<tr>
    <th>
        @Html.DisplayNameFor(model => model.RestarauntName)
    </th>
</tr>

我想写这样的东西:

<table>
@{
            <th>
                 @typeof(Tutorial.Models.RestarauntReview).GetProperty("RestarauntName").Name
             </th>
        }

它也奏效了!

所以我的猜测是 DisplayNameFor() 方法使用反射来查找相应属性的名称。

这是我打破头的东西。

  1. 使用反射的成本是多少?

  2. 对于我们希望快速渲染的较小视图,我们可以只键入属性的名称吗?(硬编码?

我应该在 C# mvc 中使用 DisplayNameFor 方法还是避免使用它

所以我的猜测是 DisplayNameFor() 方法使用反射

我怀疑不是直接的。更有可能的是使用ModelMetaData(如果您遵循跟踪,无疑最终会使用反射)。

对于我们希望快速渲染的较小视图,我们可以只键入属性的名称吗?

您可以。对于一个相当小且不变的项目来说,这可能是可以的,但我不一定推荐它。

使用反射的成本是多少?

我想你会发现它在大多数情况下是微不足道的。这是除非它成为一个问题(鸭子,递归!

更大的问题是:反思是实现目标的最佳方式吗?我认为这是你应该问的问题。反射非常有趣(我知道),但它也有点难以阅读,并且可能难以调试。这就是为什么如果有替代方案,最好避免它。在这种情况下有:模型元数据

我的意思是:尝试使用HTML帮助程序,如果它们不能完全按照您想要的方式进行,请尝试扩展它们并创建自己的帮助程序。尝试爱上显示模板和编辑器模板,并将它们与模型元数据结合使用。

在 Razor 视图中使用反射的问题在于您在视图中放置了错误的内容。观点应该是愚蠢的——这意味着它们不应该有任何逻辑,或者真的"做很多"任何事情。您只需传递视图数据,它们就会为您显示它。

我问了一个(稍微相关的)问题 HTML 助手是否值得与复杂标记一起使用?您可能会觉得有趣。