Search code examples
asp.net-mvcrazor

How to work with DropDownListFor in an EDIT view


Hi I have a problem with DropDownListFor on the Edit view.

Basically I'm using a partial view which contains my form and in my Edit and Create view I call this partial view.

I have around 5 similiar DropdownlistFor and these work well on create action but in edit doesn't, mainly i'm not getting (unable) to set the selected value.

In my Edit Action (GET), I fill my property ViewModel if the true object has the property filled.

if(icb.BAOfficer != null)
editICB.BAOfficer = icb.BAOfficer;


List<Staff> staffs = _fireService.GetAllStaffs().ToList();
staffs.Insert(0, new Staff { StaffId = -1, Name = "" });
editICB.BAOfficers = staffs;

return View(editICB);

This is how I'm filling my drop down and how I'm trying to set the selected value.

@Html.DropDownListFor(model => model.BAOfficerSelected, new SelectList(Model.BAOfficers, "StaffId", "Name", (Model.BAOfficer!= null ? Model.BAOfficer.StaffId:-1)), new { @class = "rounded indent" })
@Html.ValidationMessageFor(model => model.BAOfficer.StaffId)

Solution

  • I solve the problem setting a value to my model.BAOfficerSelected in Edit Action, this was the (easy) secret.

    I need the first item like a empty option because is not a required information, but on the edit view if has value I need to set it as selected option.

    In the end, it was my code.

    My Model

    public int BAOfficerSelected { get; set; }
    public SelectList BAOfficers { get; set; }`
    

    My Controller Create/Edit Action

    if (icb.BAOfficer != null) // only for edit action
     editICB.BAOfficerSelected = icb.BAOfficer.StaffId; //this will set the selected value like a mapping
    
    
    //for Edit and Create
    List<Staff> staffs = _fireService.GetAllStaffs().ToList();
    staffs.Insert(0, new Staff { StaffId = -1, Name = "" });
    
    editICB.BAOfficers = new SelectList(staffs, "StaffId", "Name");
    
    return View(editICB);`
    

    My View

    @Html.DropDownListFor(model => model.BAOfficerSelected, Model.BAOfficers, new { @class = "rounded indent" })
    

    I hope this can help others.