似乎有两种方法可以使用属性将字段标记为“请勿在UI上显示”。一个存在于DataAnnotations命名空间中,这是我认为它属于的地方,另一个存在于MVC特定的命名空间System.Web.Mvc中,我认为这是错误的地方。
这意味着对于MVC应用程序,我必须使用MVC命名空间来修改我的域类,而不是使用“更通用”的ComponentModel.DataAnnotations。
有没有办法让MVC框架注意到Display()属性?
答案 0 :(得分:4)
您应该在视图中使用ViewModels,而不是您域中的实体。由于ViewModel(或命令)是特定于视图的,因此它们是否具有对System.Web.x的引用并不重要。
我会调查SoC:http://en.wikipedia.org/wiki/Separation_of_concerns
Automapper / W ViewModels:http://bengtbe.com/blog/2009/04/14/using-automapper-to-map-view-models-in-asp-net-mvc/
另外,回答你的问题:
[HiddenInput(DisplayValue = false)]将呈现<input id="propId" name="propId" type="hidden" value="21" />
显示(AutoGenerateField = false)]根本不会渲染。
答案 1 :(得分:2)
虽然您应该注意Paul的答案:使用ViewModel,您的问题的常见解决方案是使用位于System.ComponentModel.DataAnnotations命名空间中的UIHint属性来装饰您的属性。
e.g。
[UIHint("Hidden")]
然后在Shared \ EditorTemplates \ Hidden.cshtml中添加一个小视图模板,如
@model object
@Html.HiddenFor( x => x)
模板名称与UIHint中给出的字符串匹配