我创建了以下下拉列表来填充城市列表。
一切正常,但我想知道这样做的更好方法。另外,请让我知道是否可以使用 < Select > 而不是 HTML 帮助程序创建相同的下拉菜单。
以下是我的 DTO 课程。请告知我是否可以对控制器和视图进行改进。
//ViewModel
public class LocationDTO
{
public IEnumerable<CityDTO> Cities { get; set; }
public LocationDTO()
{
this.Cities = new CityDTO[] { };
}
}
public class CityDTO
{
public string CityId { get; set; }
public string CityName { get; set; }
}
下面是我的控制器,我使用实体框架数据库优先方法从数据库中获取数据。您能否解决需要在我的控制器上进行的改进?
//Controller
Models.LocationDTO Loc = new Models.LocationDTO();
EF.LocationEntities locCtx = new EF.LocationEntities();
public Action Result Index() {
using(locCtx) {
var locResults = (from q in locCtx.usp_GetAllCities()
Select new Models.CityDTO {
CityId = q.Id,
CityName = q.Name });
loc.Cities = locResults.ToList();
}
List<Models.CityDTO> citiesList = new List<Models.CityDTO>();
Models.CityDTO city = new Models.CityDTO() { CityId = "-1", CityName = "Select City" };
citiesList.Add(city);
citiesList.AddRange(Loc.Cities.ToList());
ViewBag.CitiesDropDown = citiesList;
return view(loc);
}
下面是我的观点。我还想知道 lamdba 表达式在这种情况下是如何工作的。
//View
@{
List<TestApp.Models.CityDTO> citiesList = ViewBag.CitiesDropDown;
var cityItems = new SelectList(citiesList, "CityId", "CityName");
}
<div>
Cities: @Html.DropDownListFor(x => x.Cities.SingleOrDefault().CityID, @cityItems)
</div>