关于我对ASP.NET MVC和viewmodels的处理方法,我遇到了一个警告。基本上我所做的是在控制器/动作中构建一个viewmodel,它将模型合并在一起,然后将它传递给视图。
[HttpGet]
public ActionResult MyAction1()
{
List<StaffModel> staffList = new List<StaffModel>();
var qryStaff = context.Staff.Select(c => new { c.ID, c.name});
foreach (var item in qryStaff )
{
StaffModel myStaffViewModel = new StaffModel
{
ID = item.ID, Name = item.Name
};
staffList.Add(myStaffViewModel );
}
所以我做了上面的过程,也和员工一起做了,完全一样,然后把它放到employeeList中。然后我创建我的viewModel作为视图。
EmployeeStaffViewModel viewModel = new EmployeeStaffViewModel
{
Staff = staffList,
Employee = employeeList
};
然后我返回视图。我使用过员工&amp;以员工为例。我实际上有更多的模型我添加到viewModel EmployeeStaffViewModel。它在控制器动作中变得非常大。我应该将ViewModel创建为一个类,然后在我的控制器中实例化它,以便所有linq和foreach都在模型中。因此我可以在另一个控制器动作中使用它。
感谢您的任何建议。将受到极大的欢迎。
答案 0 :(得分:1)
假设您的~/Models
文件夹中有3个班级
<强> StaffModel.cs 强>
public class StaffModel
{
public int ID { get; set; }
public string Name { get; set; }
public static Func<Staff, StaffModel> Project = item => new StaffModel
{
ID = item.ID,
Name = item.Name
};
}
<强> EmployeeModel.cs 强>
public class EmployeeModel
{
public int ID { get; set; }
public string Name { get; set; }
public static Func<Employee, EmployeeModel> Project = item => new EmployeeModel
{
ID = item.ID,
Name = item.Name
};
}
<强> EmployeeStaffViewModel.cs 强>
public class EmployeeStaffViewModel
{
public EmployeeStaffViewModel()
{
Staff = new List<StaffModel>();
Employee = new List<EmployeeModel>();
}
public List<StaffModel> Staff { get; set; }
public List<EmployeeModel> Employee { get; set; }
}
StaffModel和EmployeeModel都有静态Func&lt;&gt;这会将您的数据库实体映射到您的模型。这些Func可以在您的linq查询和表达式中使用,您将在下面看到。
您可以在控制器操作中从上下文中检索实体。您可以简化代码,使其没有像您那样多的行。
<强> MyController.cs 强>
[HttpGet]
public ActionResult MyAction1()
{
var model = new EmployeeStaffViewModel();
model.Staff = context.Staff.Select(StaffModel.Project); //Select Staff to StaffModel List
model.Employee = context.Employee.Select(EmployeeModel.Project); //Select Employee to EmployeeModel List
return View(model);
}