如何在下拉列表中选择对象
How to select object in dropdown
我有一个城市级
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public string CountryCode { get; set; }
}
和Ride课程。
public class Ride
{
public Guid Id { get; set; }
public City From { get; set; }
public List<City> To { get; set; }
public DateTime DateAndTime { get; set; }
}
加载城市、将其传递到视图、在下拉列表中显示城市并将数据POST回控制器的最佳方式是什么?如果我能在"收件人"栏中添加多个城市,那将是最好的选择。我找到了Selectize.js,但我没有使用JavaScript的经验。我可以只传递给JSON等选项吗?也可以是数据库中的城市列表。
谢谢你抽出时间。
您需要一个视图模型,尤其是如果您想同时选择多个城市。例如:
public class RideViewModel
{
public Guid Id { get; set; }
public DateTime DateAndTime { get; set; }
public int FromCityId { get; set; }
public List<int> ToCityIds { get; set; }
public IEnumerable<SelectListItem> CityChoices { get; set; }
}
请注意,视图模型上没有List<City>
属性。相反,ToCityIds
将存储列表框中选定的id值,CityChoices
将用于填充列表框。不能从列表框中发布完整的City
对象,只能发布像int
这样的简单类型。因此,在POST中,您将使用ToCityIds
中的值从数据库中查找City
实例。实体上的From
属性也是如此。
现在,在您的控制器中:
private void PopulateCityChoices(RideViewModel model)
{
model.CityChoices = db.Cities.Select(m => new SelectListItem
{
Value = m.Id,
Text = m.Name
});
}
public ActionResult Create()
{
var model = new RideViewModel();
PopulateCityChoices(model);
return View(model);
}
[HttpPost]
public ActionResult Create(RideViewModel model)
{
if (ModelState.IsValid)
{
// Create new `Ride` and map data over from model
var ride = new Ride
{
Id = Guid.NewGuid(),
DateAndTime = model.DateAndTime,
From = db.Cities.Find(model.FromCityId),
To = db.Cities.Where(m => m.ToCityIds.Contains(m.Id))
}
db.Rides.Add(ride);
db.SaveChanges();
}
// Must repopulate `CityChoices` after post if you need to return the form
// view again due to an error.
PopulateCityChoices(model);
return View(model);
}
最后,在您看来,将模型声明更改为:
@model Namespace.To.RideViewModel
然后添加您的From
选择列表和To
列表框:
@Html.DropDownListFor(m => m.FromCityId, Model.CityChoices)
@Html.ListBoxFor(m => m.ToCityIds, Model.CityChoices)
您可以对两者使用相同的选项,因为它们都在选择城市。
相关文章:
- jQuery-检测选择对象是否添加或删除了选项
- 如何通过Fabric.js只点击实际内容来选择对象
- j查询选择器不选择对象
- 在选择对象中使用多个 add() 命令
- 如何使用 jQuery 克隆选择对象
- 用Javascript创建一个动态选择对象
- IndexedBD从上到下选择对象
- 当您已经选择对象时,如何在jQuery中获取直属子项
- 如何打开窗口并在该窗口中选择对象
- Fabricjs-Can'不要在fabric.util.enlivenObjects之后选择对象
- 从管线中选择“对象”“角度参数”
- 在选择对象中输入文本
- 选择对象值
- 从 javascript 对象数组中选择对象的子集
- 如何将大量项目添加到 HTML 选择对象
- 根据选项值匹配选择对象变量
- 在更改函数后使用 jQuery 选择对象,修改了需要选择的元素的 html 结构
- 使用变量中的数字动态选择对象
- 随机选择对象
- 正交摄影机和使用光线投射选择对象