Super simple implementation of multiselect list box in Edit view

前端 未结 1 1414
无人及你
无人及你 2021-01-19 04:41

Using MVC4 here with EF and CF (badly)

I have a class like this:

public class Feature
{
    public int ID { get; set; }
    public string Desc { get;         


        
相关标签:
1条回答
  • 2021-01-19 05:09

    As always you could start by writing a view model that will meet the requirements of the view you described:

    public class EditDeviceViewModel
    {
        public IEnumerable<int> SelectedFeatures { get; set; }
        public IEnumerable<SelectListItem> Features { get; set; }
        public int ID { get; set; }
        public string Name { get; set; }
    }
    

    and then your controller:

    public class DeviceController : Controller
    {
        public ActionResult Edit(int id)
        {
            Device device = (go get your device from your repository using the id)
            IList<Feature> features = (go get all features from your repository)
    
            // now build the view model
            var model = new EditDeviceViewModel();
            model.ID = device.ID;
            model.Name = device.Name;
            model.SelectedFeatures = device.Features.Select(x => x.ID);
            model.Features = features
                .Select(x => new SelectListItem
                {
                    Value = x.ID.ToString(),
                    Text = x.Name,
                })
                .ToList();
    
            // pass the view model to the view
            return View(model);
        }
    
        [HttpPost]
        public ActionResult Edit(EditDeviceViewModel model)
        {
            // model.SelectedFeatures will contain the selected feature IDs here
            ...
        }
    }
    

    and finally the view:

    @model EditDeviceViewModel
    
    @using (Html.BeginForm())
    {
        @Html.Html.HiddenFor(x => x.ID)
        <div>
            @Html.LabelFor(x => x.Name)
            @Html.EditorFor(x => x.Name)
        </div>
        <div>
            @Html.LabelFor(x => x.SelectedFeatures)
            @Html.ListBoxFor(x => x.SelectedFeatures, Model.Features)
        </div>
    
        <button type="submit">Edit</button>
    }
    
    0 讨论(0)
提交回复
热议问题