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)
我想在我的视图中有一个空的 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)