- 创建两个实体:主要实体和次要实体,例如Country和City
- 在主要实体(Country)上创建一个字符串类型的属性(例如“SelectedCity”),用于存储用户所选的次要实体(City)的ID。
- 在主要实体(Country)上创建一个虚拟属性(例如“AvailableCities”),它会返回所选国家(Country)的可用城市列表。这个属性应该以以下两种方式实现:
a) 使用查询过滤出具有所选国家ID(SelectedCity)的次要实体(City)
b) 使用查询过滤出不具有所选国家ID(SelectedCity)的次要实体(City)
示例代码:
public class Country : Entity
{
public string Name { get; set; }
public virtual ICollection Cities { get; set; }
public int? SelectedCityId { get; set; } // 新增的属性
public virtual City SelectedCity { get; set; } // 新增的导航属性
public virtual ICollection AvailableCities
{
get
{
return Cities == null
? new List()
: Cities.Where(x => x.CountryId == Id).ToList(); // 过滤出具有所选国家ID的城市
}
}
}
public class City : Entity
{
public string Name { get; set; }
public int CountryId { get; set; }
public virtual Country Country { get; set; }
}
- 在Web页面上创建两个下拉列表(例如,“CountryList”和“CityList”),并为它们设置正确的数据源。在“CountryList”的选项更改事件中,执行以下操作:
a) 获取用户选择的国家(Country)的ID
b) 使用此ID更新主要实体(Country)的“SelectedCityId”属性
c) 重新绑定“CityList”下拉列表的数据源,以显示所选国家(Country)的可选城市列表
示例代码:
CountryList_SelectedIndexChanged(object sender, EventArgs e)
{
var countryId = int.Parse(CountryList.SelectedValue);
var selectedCountry = _countryRepository.FirstOrDefault(countryId);
if (selectedCountry != null)
{
selectedCountry.SelectedCityId = null; // 重置所选城市
CityList.DataSource = selectedCountry.AvailableCities;
CityList.DataBind();
}
}
- 在主要实体(Country)上重写“ToString()”方法,以便更好地显示选定的国家和城市。
示例代码:
public override string ToString()
{
return $"{Name} ({SelectedCity?.Name ?? "All Cities"})";
}