2

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

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

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

4

2 回答 2

6

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

控制器:

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)
于 2012-12-21T11:27:10.837 回答
0

你的人属性是空的吗?

尝试添加一个默认构造函数EmployeeViewModel并添加

PersonInfo = new Person();
于 2012-12-20T23:26:31.813 回答