为什么@ Html.LabelFor可以获取资源字符串,但@Model不能在ASP.NET MVC4(razor引擎)中?

时间:2012-09-28 02:11:51

标签: asp.net-mvc razor resources

我正在使用ASP.NET MVC4应用程序。我创建了一个包含菜单项的视图模型,我可以通过Resources文件在页面中切换语言。

#region Properties
[Display(Name = "MenuText", ResourceType = typeof(App.App_Resources.Menu))]
public string menuText { get; set; }

public List<MenuItem> menuItems { get; set; }
#endregion

但是,我想在我的.cshtml文件中获取此资源字符串,然后尝试如下

@model App.Models.MenuViewModel
@Html.LabelFor(model => model.menuText)            <- Success
@Html.DisplayForModel("menuText")                  <- Success
@Model.menuText                                    <- Fail

我插入了一个断点,发现模型包含一个名称为 menuText 的属性,但值为 null 。我检查 Html 还包含属性模型,其 menuText 也是 null 。 但是, menuItems 包含项目,因为我在构造函数中分配了对象。

  1. 为什么 menuText 无法初始化并为其分配值?
  2. 为什么我能成功显示前两个资源字符串,但 Model.menuText 为空并且无法显示任何内容? @ Html.XXX @Model 中的模型有何不同?

1 个答案:

答案 0 :(得分:1)

@Model.menuText检索存储在menuText属性中的原始字符串值。属性被忽略。

使用LabelFor会导致检查属性的Display属性。本地化字符串存储在属性中,而不是属性。

请注意,我认为Model对象/类不应该用于存储显示信息(这是ViewData的用途),而是仅用于从客户端发送到服务器的往返数据