Umbraco: Create CheckBoxList property with prevalues from mvc model

后端 未结 2 1159
小鲜肉
小鲜肉 2021-01-28 03:21

What I want to do is create a CheckBoxList property so the editor could choose facilities specific for current page (hotel name) in BO, and render content based on what is check

相关标签:
2条回答
  • 2021-01-28 03:35

    Your Facility model should contain a boolean value to indicate if its been selected

    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; }
    }
    

    Controller

    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
        }
      }
      ....
    }
    

    View

    @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" />
    }
    
    0 讨论(0)
  • 2021-01-28 03:37

    I think you're thinking about this the wrong way as suggested by Stephen (unless I am misunderstanding your question). You are creating a list of key/value pairs and only one will be selected in the BO and so only one will published to the front-end (regardless of the use of it).

    So, in the BO you only need a dropdown list with the key/values pairs. You can create this with the "Dropdown list (publishing keys)" datatype. Also consider using the "SQL dropdown" list datatype as this would give you far more flexibility.

    If you then need to convert the selected ID into a Facility object, do this separately using a class implementing the IPropertyEditorValueConverter interface. See here for more information:

    http://our.umbraco.org/documentation/extending-umbraco/Property-Editors/PropertyEditorValueConverters

    0 讨论(0)
提交回复
热议问题