Click here to Skip to main content
15,893,381 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi All,

I have a model that one its properties should be updated using a drop-down box. I created a viewmodel for it so as to enjoy model-binding at the view but my previously selected value is not showing when I launch the edit page. Please what parameters do I pass to ensure the previous selected item shows when the edit page is launched.
Please find below my view model, controller and view page.

ViewModel
C#
namespace ProAssure.ICMS.Web.Models.Severity
{
    public class SeverityUpdateViewModel
    {
        public SelectList Criticality { set; get; }


        public SeverityUpdateViewModel(SeverityUpdateDto severityUpdateDto)
        {
            List<SelectListItem> dummyList = new List<SelectListItem>();

            foreach (var availableCriticality in severityUpdateDto.Criticality)
            {
                var listItem = new SelectListItem()
                {
                    Text = availableCriticality.ToString(),
                    Value = availableCriticality.ToString()
                  , Selected = availableCriticality.ToString().Equals(severityUpdateDto.Selected.ToString())

                };
                dummyList.Add(listItem);
            }

            this.Criticality = new SelectList(dummyList, "Text", "Value", severityUpdateDto.Selected.ToString());
        }
    }
}


Controller
C#
public async Task<ActionResult> Edit(int? id)
{
    SeverityUpdateViewModel severityUpdateViewModel = new SeverityUpdateViewModel(severity);

    return View(severityUpdateViewModel);
}


View
HTML
<div class="form-group">
    @Html.LabelFor(model => model.Criticality, htmlAttributes: new { @class = "control-label col-md-3" })
    <div class="col-md-9">
        @Html.DropDownListFor(model => model.Criticality, Model.Criticality, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Criticality, "", new { @class = "text-danger" })
    </div>
</div>



Thank you very much
Posted

1 solution

This is the way I have used the DropDownListFor method to fill and select drop downs:

Include the drop down list in the model as a property

C#
@Html.DropDownListFor(model => model.AvailabilityCriticalID, Model.AvailabilityCriticalityList)


Inside the model:

C#
public IEnumerable<SelectListItem> AvailabilityCriticalityList
{
    get
    {
        IEnumerable<SelectListItem> Results = (from x in GetAvailabilityCriticalityList()
                                               select new SelectListItem() { Text = x.ToString(), Value = x.AvailabilityCriticalityID.ToString() });

        return Results;
    }
}


The selection of the item in the drop down is automatic.
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900