ASP.NET Razor MVC中复杂数据类型的DisplayName属性

Urb*_*net 2 asp.net-mvc attributes razor

我有一个非常简单的要求.在MVC4项目中,我必须使用@HTML.labelFor字段显示一个表单,该字段从viewmodel类的属性的属性字段中派生值.它适用于简单的属性,如Employee Code,但它不适用于person类的自定义数据类型.

namespace MvcApplication1.Models
{
  public class EmployeeViewModel
  {
    [Display(Name = "Employee Code:")]
    public string EmpCode { get; set; }

    public person PersonInfo { get; set; }

    [Display(Name = "Department Name:")]    
    public string Department { get; set; }
  }
}

namespace MvcApplication1.Models
{
  public class Person
  {
    [Display(Name = "First Name:")]
    public string FName { get; set; }

    [Display(Name = "Last Name:")]
    public string LName { get; set; }
  }
}
Run Code Online (Sandbox Code Playgroud)

@Html.LabelFor(m => Model.EmpCode) 正确显示标签为员工代码:

@Html.LabelFor(m => Model.PersonInfo.FName) 将标签显示为FName:

@Html.LabelFor(m => Model.PersonInfo.LName) 将标签错误地显示为LName:

@Html.LabelFor(m => Model.PersonInfo.Department) 正确显示标签作为部门名称:

我试图弄清楚如何显示对象类型属性的属性信息.我有使用扩展方法吗?

Mar*_*rkG 5

您使用的是错误的属性.下面这个简单的例子有效.

控制器:

public ActionResult Index()
{
    var model = new ParentModel {
        Name = "Parent name", 
        Child = new ChildModel {
            Name = "Child name"
        }
    };

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

楷模:

public class ParentModel
    {
        [DisplayName("Parent name:")]
        public string Name { get; set; }
        public ChildModel Child { get; set; }
    }

    public class ChildModel
    {
        [DisplayName("Child name:")]
        public string Name { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

视图:

@model ParentModel

@Html.LabelFor(model => model.Name)
@Html.LabelFor(model => model.Child.Name)
Run Code Online (Sandbox Code Playgroud)