我有一个非常简单的要求。在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)
正确显示标签为部门名称:
我试图弄清楚如何显示对象类型属性的属性信息。我有使用扩展方法吗?
答案 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();