I'm trying to Select multiple values and assign them to a selectlist with specific option/value which is then passed via viewbag to my view, the problem I'm having is with the structure when its rendered and when in edit mode the value is not pre-populated.
I've done various searches to get me to this point but most use JQuery or other frameworks, Im looking to remain within C# / MVC it's just I'm now unsure of what phrase to search for in order to find an existing solution to this type of problem.
Can anyone give me a few pointers?
View:
<div class="form-group">
@Html.LabelFor(model => model.employeeID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.employeeID, ViewBag.employee as List<SelectListItem>, "Select", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.employeeID, "", new { @class = "text-danger" })
</div>
</div>
Controller :
var employeeID = ((from x in dbdev.employeeDetails orderby x.employeeID select new { Name = x.employeeNumber + x.knownas + x.surname, Value = x.employeeID } ).Distinct()).ToList();
SelectList employeeIDList = new SelectList(employeeID);
ViewBag.employeeID = employeeIDList;
Model:
[Required]
[Range(1, 2147483647)]
[Display(Name = "Employee ID")]
public int employeeID { get; set; }
Once my code is rendered the select has the following structure
<option>{ Name = 568883PhilShort, Value = 1 }</option>
but I'm actually trying to produce the following structure.
<option value="1">568883 Phil Short</option>
Below is after modification from comments
Model / HTML Unchanged
Updated controller based on comments:
var employeesList = (from x in dbdev.employeeDetails.AsEnumerable()
orderby x.employeeID ascending
select new
{
Name = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname),
Value = x.employeeID
}).ToList();
SelectList employeeIDList = new SelectList(employeesList, "Value", "Name", userAccess.employeeID);
ViewBag.employeeID = employeeIDList;
Then to reduce the code I refactored to the following:
ViewBag.employeeID = new SelectList((from x in dbdev.employeeDetails.AsEnumerable()
orderby x.employeeID ascending
select new
{
Name = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname),
Value = x.employeeID
}).ToList(), "Value", "Name", userAccess.employeeID);