我有一个关于在Razor视图中使用强类型模型并打印其属性的问题。在某些情况下,我可以使用
@model Namespace.Class
@Html.LabelFor(model => model.property)
并且它工作正常,但在其他不起作用但通常会这样做:
@Model.property
乍一看,我不确定区别,为什么例如@Html.LabelFor(model => model.property)只会打印出属性名称,在这种情况下,@ Model.property会打印出值属性。
我怀疑这有一个简单的解释,我只是没有找到正确的搜索词,所以如果你能提供一个简短的解释或一个很棒的链接。
答案 0 :(得分:4)
Html.LabelFor
将始终尝试打印属性名称或属性的元数据值。这样您只需要在一个地方更改元数据,而不是更新可能依赖于该属性的所有视图。
想象一下,如果你有10个视图都引用了Namespace.Class.FirstName
,你只需在所有视图中输入“名字”。后来你意识到你需要支持其他文化,现在需要将“名字”的所有引用改为“给定名称”。如果您在任何地方使用Html.LabelFor
,那么您只需要更改模型。
namespace Namespace {
class Class {
[Display(Name="Given name")]
public string FirstName {get;set;}
}
}
现在您已经完成了,并且您使用Html.LabelFor
引用该属性的所有位置都将更新,而无需查看所有代码。此外,它还可以更轻松地支持不同的语言等。