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

时间:2012-12-20 23:10:42

标签: asp.net-mvc razor attributes

我有一个非常简单的要求。在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; }
  }
}

@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)正确显示标签为部门名称:

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

2 个答案:

答案 0 :(得分:5)

您使用的是错误的属性。下面这个简单的例子可以使用。

<强>控制器:

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

    return View(model);
}

<强>型号:

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; }
    }

查看:

@model ParentModel

@Html.LabelFor(model => model.Name)
@Html.LabelFor(model => model.Child.Name)

答案 1 :(得分:0)

你的人物属性是否为空?

尝试在EmployeeViewModel中添加默认构造函数并添加

PersonInfo = new Person();