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



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

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

然而,我想在我的.cs.html文件中获得这个资源字符串,然后我尝试如下

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

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

  1. 为什么菜单文本无法初始化并赋值
  2. 为什么我可以成功地显示前两个资源字符串,但Model.menuText为null,却无法显示任何内容?@Html.XXX@模型中的模型有什么不同

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

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

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

最新更新