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

时间:2015-08-25 21:37:08

标签: asp.net-mvc html-helper razorengine

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

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

但在我看来很尴尬。我想避免向View发送数据,因为该表最初是空的,因此不使用数据本身。你能建议一个更优雅的方式吗? 感谢。

2 个答案:

答案 0 :(得分:1)

实际上,它比那更直截了当。 MVC非常聪明,即使列表中没有条目,下面的代码也能正常工作:

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

答案 1 :(得分:-1)

我找到了一个有效的解决方案,但我不确定它是否是最好的解决方案。 首先,我的ViewModel(也就是EmployeesViewModel)我添加了一个EmployeeViewModel类型的成员:

link=html("http://www.canadiantire.ca/en/store-locator.html")
link %>% html_nodes("#container > div.clearfix > div.parbase.container.sl-closest-location-container > div.sl-closest-location-container__inner > div > div:nth-child(1) > div.sl-closest-location-container__store-name.sl-closest-location-container__active > span.sl-closest-location-container__item-name") %>% html_text()

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

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

在视图中:

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

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