我已经说过这一点大约一百万次了,但我对 ASP.Net MVC(以及一般的 ASP.NET)仍然是新手,所以很抱歉,如果这有点明显......
好的,我有一个控制器将数据发送到两个视图。一个视图仅列出数据库中的数据,而另一个视图允许您分别编辑和添加记录(它们使用相同的视图,但传入不同的参数)。
编辑视图是我的问题所在。我的表单中有四个下拉菜单,其中填充了我的存储库中的数据(来自我的数据库中的 3 个不同的表)。使用下面的代码,这一切都 100% 绝对正常,没有错误。
我的问题是填充这些下拉列表的最佳方法是什么?目前,我的视图代码如下所示,通过控制器中的 ViewData 传递数据:
编辑视图:
public ViewResult EditJob(int jobId)
{
IList<JobCust> customerList = jobsRepository.JobCustomers.OrderBy(Customer => Customer.CompanyName).ToList();
ViewData["customers"] = new SelectList(customerList, "CompanyName", "CompanyName");
IList<JobVehicle> vehicleRegList = jobsRepository.JobVehicles.OrderBy(Vehicle => Vehicle.VehicleReg).ToList();
ViewData["vehicleReg"] = new SelectList(vehicleRegList, "VehicleReg", "VehicleReg");
IList<JobVehicle> vehicleTypeList = jobsRepository.JobVehicles.OrderBy(Vehicle => Vehicle.VehicleType).ToList();
ViewData["vehicleType"] = new SelectList(vehicleTypeList, "VehicleType", "VehicleType");
IList<JobDriver> driverList = jobsRepository.JobDrivers.OrderBy(Driver => Driver.LastName).ToList();
ViewData["LastName"] = new SelectList(driverList, "LastName", "LastName");
var job = jobsRepository.Jobs.First(x => x.JobID == jobId);
return View(job);
}
添加视图:
public ViewResult AddJob()
{
IList<JobCust> customerList = jobsRepository.JobCustomers.OrderBy(Customer => Customer.CompanyName).ToList();
ViewData["customers"] = new SelectList(customerList, "CompanyName", "CompanyName");
IList<JobVehicle> vehicleRegList = jobsRepository.JobVehicles.OrderBy(Vehicle => Vehicle.VehicleReg).ToList();
ViewData["vehicleReg"] = new SelectList(vehicleRegList, "VehicleReg", "VehicleReg");
IList<JobVehicle> vehicleTypeList = jobsRepository.JobVehicles.OrderBy(Vehicle => Vehicle.VehicleType).ToList();
ViewData["vehicleType"] = new SelectList(vehicleTypeList, "VehicleType", "VehicleType");
IList<JobDriver> driverList = jobsRepository.JobDrivers.OrderBy(Driver => Driver.LastName).ToList();
ViewData["LastName"] = new SelectList(driverList, "LastName", "LastName");
return View("EditJob", new Job());
}
我有一大块重复的代码困扰着我。我知道会有更好的解决方案,但我只是不知道它是什么。我现在想在此控制器内的另一个视图上使用同一组下拉菜单,因此我将使用当前方法第三次复制此代码。
有任何想法吗?也许这是我完全忽略的明显事情......提前感谢您的帮助。