我想要做的是创建一个CheckBoxList属性,这样编辑器就可以在BO中选择特定于当前页面(酒店名称)的设施,并根据检查的内容呈现内容。
我创建了一个模型:
public class Facility
{
public int Id { get; set; }
public string Description { get; set; }
public string IconUrl { get; set; }
public List<Facility> GetFacilities()
{
return new List<Facility>()
{
new Facility() { Id = 4, Description = "Free parking", IconUrl = "" },
new Facility() { Id = 6, Description = "Spa", IconUrl = "" },
new Facility() { Id = 7, Description = "Free Wifi", IconUrl = "" },
new Facility() { Id = 2, Description = "Tennis", IconUrl = "" },
new Facility() { Id = 9, Description = "Room service", IconUrl = "" },
new Facility() { Id = 10, Description = "Fitness", IconUrl = "" }
};
}
}
如何使用GetFacilities()方法中设置的值创建CheckBoxList?或者我应该使用此方法在AppCode文件夹中创建一个新类?放置此类功能的最佳位置在哪里,我该如何实现?
答案 0 :(得分:1)
您的Facility
模型应包含一个布尔值,以指示其是否已被选中
public class FacilityVM
{
public int Id { get; set; }
public string Description { get; set; }
public bool IsSelected { get; set; }
{
public class HotelVM
{
public int ID{ get; set; }
....
public List<FacilityVM> Facilities { get; set; }
}
控制器
public ActionResult Edit(int ID)
{
HotelVM model = new HotelVM();
model.Facilities = // populate the list of available facilities
// Get the hotel from repository and map properties to the view model
return View(model);
}
public ActionResult Edit(HotelVM model)
{
...
foreach(FacilityVM facility in model.Facilities)
{
if (facility.IsSelected)
{
// do something
}
}
....
}
查看
@model HotelVM
@using (Html.BeginForm())
{
// render properties of hotel
....
for (int i = 0; i < Model.Facilities.Count; i++)
{
@Html.HiddenFor(m => m.Facilities[i].ID);
@Html.HiddenFor(m => m.Facilities[i].Description);
@Html.CheckBoxFor(m => m.Facilities[i].IsSelected)
@Html.LabelFor(m => m.Facilities[i].IsSelected, Model.Facilities[i].Description)
}
<input type="submit" value="Save" />
}
答案 1 :(得分:1)
我认为你正在考虑斯蒂芬所建议的错误方式(除非我误解了你的问题)。您正在创建一个键/值对列表,并且只有一个将在BO中被选中,因此只有一个将发布到前端(无论是否使用它)。
因此,在BO中,您只需要一个带有键/值对的下拉列表。您可以使用“下拉列表(发布密钥)”数据类型创建它。还要考虑使用“SQL下拉列表”列表数据类型,因为这样可以提供更大的灵活性。
如果您需要将所选ID转换为Facility
对象,请使用实现IPropertyEditorValueConverter
接口的类单独执行此操作。有关更多信息,请参见此处: