MVC 3 Razor @model 与使用 @Model.pName 与 @Html.LabelFor(model => model.pName) 打印属性的模型

Posted

技术标签:

【中文标题】MVC 3 Razor @model 与使用 @Model.pName 与 @Html.LabelFor(model => model.pName) 打印属性的模型【英文标题】:MVC 3 Razor @model vs. Model printing a property using @Model.pName vs. @Html.LabelFor(model => model.pName) 【发布时间】:2011-08-09 13:24:55 【问题描述】:

我有一个关于在 Razor 视图中使用强类型模型并打印它们的属性的问题。在某些情况下,我可以使用

@model Namespace.Class

@html.LabelFor(model => model.property) 

它工作正常,但是在其他不起作用但通常这样做的情况下:

@Model.property

乍一看,我不确定其中的区别以及为什么 @Html.LabelFor(model => model.property) 会简单地打印出属性名称,在这种情况下,@Model.property 会打印出属性。

我怀疑这有一个简单的解释,我只是没有找到正确的搜索词,所以如果你能提供一个简短的解释或一个很好的链接。

【问题讨论】:

【参考方案1】:

Html.LabelFor总是尝试打印属性名称或属性的元数据值。这样一来,您实际上只需要在一个地方更改元数据,而不是更新可能依赖该属性的所有视图。

想象一下,如果您有 10 个视图都引用了 Namespace.Class.FirstName,而您只是在所有视图中输入了“名字”。后来你意识到你需要支持其他文化,现在需要将所有“名字”的引用改为“名字”。如果你在任何地方都使用了Html.LabelFor,那么你只需要改变你的模型。

namespace Namespace 
    class Class 
        [Display(Name="Given name")]
        public string FirstName get;set;
    

现在您已经完成了,您使用Html.LabelFor 引用该属性的任何地方都将被更新,而无需遍历您的所有代码。此外,它还可以更轻松地支持不同的语言等。

【讨论】:

感谢您的澄清!

以上是关于MVC 3 Razor @model 与使用 @Model.pName 与 @Html.LabelFor(model => model.pName) 打印属性的模型的主要内容,如果未能解决你的问题,请参考以下文章

《精通MVC5.0》chapter5笔记-Razor语法

如何在 mvc4 razor 中显示验证消息

.net MVC,Razor语法详细介绍

通过 jquery Ajax 上传图片到 Model Data 到 Controller MVC/Razor

将 Ajax.BeginForm 与 A​​SP.NET MVC 3 Razor 一起使用

在 Razor (C#/MVC 4) 中生成“友好 URL”的帮助程序