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) 打印属性的模型的主要内容,如果未能解决你的问题,请参考以下文章
通过 jquery Ajax 上传图片到 Model Data 到 Controller MVC/Razor