我正在尝试从视图模型填充下拉列表,而视图模型又将调用服务层,该服务层位于不同的项目中但在同一解决方案中。但是,服务层中的依赖关系是通过UnityFramework从构造函数提供的。所以这使得任务有点复杂。 实现的一种方法可能是使方法静态并直接从类中调用服务方法而不创建它的实例。但是我觉得这不是正确的方式>
那么进行该调用并从视图模型填充下拉列表的最佳方法是什么。 我知道可以从HttpGet(在代码中显示)和HttpPost控制器填充相同的下拉列表但我觉得 这有点矫枉过正。
这是我的控制器
[HttpGet]
public ActionResult Create()
{
CarViewModel model = new CarViewModel();
var colourList = _service.GetAllColours();
model.ColourList = colourList.Select(x => new SelectListItem
{
Text = x.description,
Value = x.id.ToString()
}).ToList();
return View(model);
}
这是我的ViewModel
public class CarViewModel
{
[Required(ErrorMessage = "Please enter the Reg No")]
public string RegNo { get; set; }
[Required(ErrorMessage = "Please enter colour")]
public int Colour { get; set; }
public List<SelectListItem> ColourList
{
get; //How can i make a service call from here? and get rid of set keyword.
set;
}
}
视图中的代码
@using (Html.BeginForm("Create","CarRental",FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.LabelFor(x=>x.Colour)
@Html.DropDownListFor(x=>x.Colour,Model.ColourList,"Please Make a Selection")
@Html.ValidationMessageFor(x=>x.Colour)
<input type="submit" value="Submit" id="submitButton"/>
}
来自服务层的代码,该代码位于不同的项目中但在同一解决方案中
public class DAO
{
private CarRentalEntities _entities;
public DAO(CarRentalEntities entities)
{
_entities = entities;
}
public List<Colour> GetAllColours()
{
List<Colour> colours = (from c in _entities.Colours select c).ToList<Colour>();
return colours;
}
}