我应该在 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() 方法使用反射来查找相应属性的名称。
这是我打破头的东西。
使用反射的成本是多少?
对于我们希望快速渲染的较小视图,我们可以只键入属性的名称吗?(硬编码?
所以我的猜测是 DisplayNameFor() 方法使用反射
我怀疑不是直接的。更有可能的是使用ModelMetaData(如果您遵循跟踪,无疑最终会使用反射)。
对于我们希望快速渲染的较小视图,我们可以只键入属性的名称吗?
您可以。对于一个相当小且不变的项目来说,这可能是可以的,但我不一定推荐它。
使用反射的成本是多少?
我想你会发现它在大多数情况下是微不足道的。这是除非它成为一个问题(鸭子,递归!
更大的问题是:反思是实现目标的最佳方式吗?我认为这是你应该问的问题。反射非常有趣(我知道),但它也有点难以阅读,并且可能难以调试。这就是为什么如果有替代方案,最好避免它。在这种情况下有:模型元数据。
我的意思是:尝试使用HTML帮助程序,如果它们不能完全按照您想要的方式进行,请尝试扩展它们并创建自己的帮助程序。尝试爱上显示模板和编辑器模板,并将它们与模型元数据结合使用。
在 Razor 视图中使用反射的问题在于您在视图中放置了错误的内容。观点应该是愚蠢的——这意味着它们不应该有任何逻辑,或者真的"做很多"任何事情。您只需传递视图数据,它们就会为您显示它。
我问了一个(稍微相关的)问题 HTML 助手是否值得与复杂标记一起使用?您可能会觉得有趣。