以下のドロップダウンを作成して、都市のリストを作成しました。
すべて正常に動作しますが、これを行うためのより良い方法を知りたいと思います。また、HTMLヘルパーの代わりに<Select>を使用して同じドロップダウンを作成できるかどうかをお知らせください。
以下は私の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>