ASP.NET MVC中DisplayAttribute.Order不生效无法调整视图字段顺序问题
问题产生原因
- 你当前给两个字段配置的
DisplayAttribute.Order值是正确的,LastName的Order值更小,按规则应该排在前面,配置本身没有错误。 DisplayAttribute.Order属性的作用是给自动生成UI的辅助方法提供排序依据,比如Html.EditorForModel()、Html.DisplayForModel()这类不需要手动编写每个字段渲染逻辑的方法,才会读取Order值调整字段输出顺序。- 你用Visual Studio脚手架生成的Create.cshtml属于硬编码字段渲染顺序的视图,代码里已经固定先写FirstName的渲染逻辑,再写LastName的渲染逻辑,硬编码的优先级高于模型注解,所以Order属性不会生效。
- 官方文档从未说明该属性仅对列生效,所有自动读取模型元数据生成UI的组件(包括表单生成组件、网格组件等)都会遵循Order属性的配置;《Professional ASP.NET MVC 5》中提到的调整字段排序,针对的也是自动生成表单的场景,不适用于已经手动生成了字段渲染代码的场景。
解决方案
方案1:使用自动生成表单的方法
将视图中所有手写的字段form-group代码块删除,替换为一行@Html.EditorForModel()即可,框架会自动读取Order属性,先渲染LastName再渲染FirstName,同时会自动带上验证规则、样式等配置。如果需要自定义字段的渲染逻辑,可以配合编辑器模板实现。
方案2:直接调整视图代码顺序
直接将视图中LastName对应的整块form-group代码移动到FirstName的form-group代码前面,是最快的解决方法,适合需要对单个字段的渲染逻辑做自定义调整的场景。
方案3:自定义脚手架模板
如果后续需要频繁使用脚手架生成视图,希望生成时自动遵循Order属性的排序规则,可以修改Visual Studio自带的MVC脚手架模板,调整模板读取模型元数据时的排序逻辑,后续生成的视图就会自动按Order值排列字段顺序。
内容的提问来源于stack exchange,提问作者symbiont
相关产品推荐
相关产品推荐

