MVC:将列名传递给视图的好方法是什么?

MVC: What is a good way to pass column names to the view?

我想在我的视图中有一个空的 table,并根据用户选择的一些下拉列表使用 AJAX 填充它。我的模型包含下拉列表的数据。由于 table header 没有改变,我希望它静态地在视图上。我想知道什么是传递给要在 @Html.DisplayNameFor() 中使用的视图列名称的好方法。当然,我可以传递一条记录并从中检索名称,例如

@Html.DisplayNameFor(model => model.Employees[0].LastName)

但在我看来这很尴尬。我想避免向视图发送数据,因为 table 最初是空的,所以数据本身没有被使用。你能建议一个更优雅的方式吗? 谢谢

我找到了一个可行的解决方案,但我不确定它是否是最佳解决方案。 首先,在我的 ViewModel(即 EmployeesViewModel)中,我添加了一个 EmployeeViewModel 类型的成员:

public class EmployeeViewModel
{
        public int Id { get; set; }
        [Display(Name = "First Name")]
        public string FirstName { get; set; }
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        public string Gender { get; set; }
        public int? Salary { get; set; }
        public int? DepartmentId { get; set; }
        [Display(Name = "Department Name")]
        public string DepartmentName { get; set; }
}

public class EmployeesViewModel
{
    public SelectList Departments { get; set; }
    public EmployeeViewModel EmployeeColumnNamesRetriever { get; set; }
}

在控制器中,我实例化了我的部门,但不是 EmployeeColumnNamesRetriever,因为我只需要它来获取它的元数据:

        EmployeesViewModel employees = new EmployeesViewModel
        {
            Departments = new SelectList(db.Departments, "Id", "Name"),
        };

在视图中:

    <th>
        @Html.DisplayNameFor(model => model.EmployeeColumnNamesRetriever.FirstName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.EmployeeColumnNamesRetriever.LastName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.EmployeeColumnNamesRetriever.Gender)
    </th>

EmployeeColumnNamesRetriever 为空,但没关系。 如果有人能提出更好的建议,我将不胜感激。

实际上,它比那更直接。 MVC 在这方面非常聪明,即使您的列表中没有条目,以下代码也能正常工作:

@Html.DisplayNameFor(model => model.Employees.First().LastName)