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

时间:2011-08-09 13:24:56

标签: asp.net-mvc razor model

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

@model Namespace.Class

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

并且它工作正常,但在其他不起作用但通常会这样做:

@Model.property

乍一看,我不确定区别,为什么例如@Html.LabelFor(model => model.property)只会打印出属性名称,在这种情况下,@ Model.property会打印出值属性。

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

1 个答案:

答案 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引用该属性的所有位置都将更新,而无需查看所有代码。此外,它还可以更轻松地支持不同的语言等。